{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "4cd72ea2",
   "metadata": {},
   "source": [
    "# DAY 40\n",
    "昨天我们介绍了图像数据的格式以及模型定义的过程，发现和之前结构化数据的略有不同，主要差异体现在2处\n",
    "1. 模型定义的时候需要展平图像\n",
    "2. 由于数据过大，需要将数据集进行分批次处理，这往往涉及到了dataset和dataloader来规范代码的组织\n",
    "\n",
    "现在我们把注意力放在训练和测试代码的规范写法上"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9ad75bfe",
   "metadata": {},
   "source": [
    "## 单通道图片的规范写法"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "id": "e93b2be1",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "使用设备: cuda\n"
     ]
    }
   ],
   "source": [
    "# 先继续之前的代码\n",
    "import torch\n",
    "import torch.nn as nn\n",
    "import torch.optim as optim\n",
    "from torch.utils.data import DataLoader , Dataset # DataLoader 是 PyTorch 中用于加载数据的工具\n",
    "from torchvision import datasets, transforms # torchvision 是一个用于计算机视觉的库，datasets 和 transforms 是其中的模块\n",
    "import matplotlib.pyplot as plt\n",
    "import warnings\n",
    "# 忽略警告信息\n",
    "warnings.filterwarnings(\"ignore\")\n",
    "# 设置随机种子，确保结果可复现\n",
    "torch.manual_seed(42)\n",
    "device = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n",
    "print(f\"使用设备: {device}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "id": "61859d8f",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 1. 数据预处理\n",
    "transform = transforms.Compose([\n",
    "    transforms.ToTensor(),  # 转换为张量并归一化到[0,1]\n",
    "    transforms.Normalize((0.1307,), (0.3081,))  # MNIST数据集的均值和标准差\n",
    "])\n",
    "\n",
    "# 2. 加载MNIST数据集\n",
    "train_dataset = datasets.MNIST(\n",
    "    root='./data',\n",
    "    train=True,\n",
    "    download=True,\n",
    "    transform=transform\n",
    ")\n",
    "\n",
    "test_dataset = datasets.MNIST(\n",
    "    root='./data',\n",
    "    train=False,\n",
    "    transform=transform\n",
    ")\n",
    "\n",
    "# 3. 创建数据加载器\n",
    "batch_size = 64  # 每批处理64个样本\n",
    "train_loader = DataLoader(train_dataset, batch_size=batch_size, shuffle=True)\n",
    "test_loader = DataLoader(test_dataset, batch_size=batch_size, shuffle=False)\n",
    "\n",
    "# 4. 定义模型、损失函数和优化器\n",
    "class MLP(nn.Module):\n",
    "    def __init__(self):\n",
    "        super(MLP, self).__init__()\n",
    "        self.flatten = nn.Flatten()  # 将28x28的图像展平为784维向量\n",
    "        self.layer1 = nn.Linear(784, 128)  # 第一层：784个输入，128个神经元\n",
    "        self.relu = nn.ReLU()  # 激活函数\n",
    "        self.layer2 = nn.Linear(128, 10)  # 第二层：128个输入，10个输出（对应10个数字类别）\n",
    "        \n",
    "    def forward(self, x):\n",
    "        x = self.flatten(x)  # 展平图像\n",
    "        x = self.layer1(x)   # 第一层线性变换\n",
    "        x = self.relu(x)     # 应用ReLU激活函数\n",
    "        x = self.layer2(x)   # 第二层线性变换，输出logits\n",
    "        return x\n",
    "\n",
    "# 初始化模型\n",
    "model = MLP()\n",
    "model = model.to(device)  # 将模型移至GPU（如果可用）\n",
    "\n",
    "# from torchsummary import summary  # 导入torchsummary库\n",
    "# print(\"\\n模型结构信息：\")\n",
    "# summary(model, input_size=(1, 28, 28))  # 输入尺寸为MNIST图像尺寸\n",
    "\n",
    "criterion = nn.CrossEntropyLoss()  # 交叉熵损失函数，适用于多分类问题\n",
    "optimizer = optim.Adam(model.parameters(), lr=0.001)  # Adam优化器"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "id": "10fe5bb3",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 5. 训练模型（记录每个 iteration 的损失）\n",
    "def train(model, train_loader, test_loader, criterion, optimizer, device, epochs):\n",
    "    model.train()  # 设置为训练模式\n",
    "    \n",
    "    # 新增：记录每个 iteration 的损失\n",
    "    all_iter_losses = []  # 存储所有 batch 的损失\n",
    "    iter_indices = []     # 存储 iteration 序号（从1开始）\n",
    "    \n",
    "    for epoch in range(epochs):\n",
    "        running_loss = 0.0\n",
    "        correct = 0\n",
    "        total = 0\n",
    "        \n",
    "        for batch_idx, (data, target) in enumerate(train_loader):\n",
    "            # enumerate() 是 Python 内置函数，用于遍历可迭代对象（如列表、元组）并同时获取索引和值。\n",
    "            # batch_idx：当前批次的索引（从 0 开始）\n",
    "            # (data, target)：当前批次的样本数据和对应的标签，是一个元组，这是因为dataloader内置的getitem方法返回的是一个元组，包含数据和标签。\n",
    "            # 只需要记住这种固定写法即可\n",
    "            data, target = data.to(device), target.to(device)  # 移至GPU(如果可用)\n",
    "            \n",
    "            optimizer.zero_grad()  # 梯度清零\n",
    "            output = model(data)  # 前向传播\n",
    "            loss = criterion(output, target)  # 计算损失\n",
    "            loss.backward()  # 反向传播\n",
    "            optimizer.step()  # 更新参数\n",
    "            \n",
    "            # 记录当前 iteration 的损失（注意：这里直接使用单 batch 损失，而非累加平均）\n",
    "            iter_loss = loss.item()\n",
    "            all_iter_losses.append(iter_loss)\n",
    "            iter_indices.append(epoch * len(train_loader) + batch_idx + 1)  # iteration 序号从1开始\n",
    "            \n",
    "            # 统计准确率和损失\n",
    "            running_loss += loss.item() #将loss转化为标量值并且累加到running_loss中，计算总损失\n",
    "            _, predicted = output.max(1) # output：是模型的输出（logits），形状为 [batch_size, 10]（MNIST 有 10 个类别）\n",
    "            # 获取预测结果，max(1) 返回每行（即每个样本）的最大值和对应的索引，这里我们只需要索引\n",
    "            total += target.size(0) # target.size(0) 返回当前批次的样本数量，即 batch_size，累加所有批次的样本数，最终等于训练集的总样本数\n",
    "            correct += predicted.eq(target).sum().item() # 返回一个布尔张量，表示预测是否正确，sum() 计算正确预测的数量，item() 将结果转换为 Python 数字\n",
    "            \n",
    "            \n",
    "            # 每100个批次打印一次训练信息（可选：同时打印单 batch 损失）\n",
    "            if (batch_idx + 1) % 100 == 0:\n",
    "                print(f'Epoch: {epoch+1}/{epochs} | Batch: {batch_idx+1}/{len(train_loader)} '\n",
    "                      f'| 单Batch损失: {iter_loss:.4f} | 累计平均损失: {running_loss/(batch_idx+1):.4f}')\n",
    "        \n",
    "        # 测试、打印 epoch 结果\n",
    "        epoch_train_loss = running_loss / len(train_loader)\n",
    "        epoch_train_acc = 100. * correct / total\n",
    "        epoch_test_loss, epoch_test_acc = test(model, test_loader, criterion, device)\n",
    "        \n",
    "        print(f'Epoch {epoch+1}/{epochs} 完成 | 训练准确率: {epoch_train_acc:.2f}% | 测试准确率: {epoch_test_acc:.2f}%')\n",
    "    \n",
    "    # 绘制所有 iteration 的损失曲线\n",
    "    plot_iter_losses(all_iter_losses, iter_indices)\n",
    "    # 保留原 epoch 级曲线（可选）\n",
    "    # plot_metrics(train_losses, test_losses, train_accuracies, test_accuracies, epochs)\n",
    "    \n",
    "    return epoch_test_acc  # 返回最终测试准确率"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "fe0bf271",
   "metadata": {},
   "source": [
    "之前我们用mlp训练鸢尾花数据集的时候并没有用函数的形式来封装训练和测试过程，这样写会让代码更加具有逻辑-----隔离参数和内容。\n",
    "\n",
    "1. 后续直接修改参数就行，不需要去找到对应操作的代码\n",
    "2. 方便复用，未来有多模型对比时，就可以复用这个函数\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "25058350",
   "metadata": {},
   "source": [
    "这里我们先不写早停策略，因为规范的早停策略需要用到验证集，一般还需要划分测试集\n",
    "\n",
    "1. 划分数据集：训练集（用于训练）、验证集（用于早停和调参）、测试集（用于最终报告性能）。\n",
    "2. 在训练过程中，使用验证集触发早停。\n",
    "3. 训练结束后，仅用测试集运行一次测试函数，得到最终准确率。\n",
    "\n",
    "\n",
    "测试函数和绘图函数均被封装在了train函数中，但是test和绘图函数在定义train函数之后，这是因为在 Python 中，函数定义的顺序不影响调用，只要在调用前已经完成定义即可。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "id": "39fe8452",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 6. 测试模型（不变）\n",
    "def test(model, test_loader, criterion, device):\n",
    "    model.eval()  # 设置为评估模式\n",
    "    test_loss = 0\n",
    "    correct = 0\n",
    "    total = 0\n",
    "    \n",
    "    with torch.no_grad():  # 不计算梯度，节省内存和计算资源\n",
    "        for data, target in test_loader:\n",
    "            data, target = data.to(device), target.to(device)\n",
    "            output = model(data)\n",
    "            test_loss += criterion(output, target).item()\n",
    "            \n",
    "            _, predicted = output.max(1)\n",
    "            total += target.size(0)\n",
    "            correct += predicted.eq(target).sum().item()\n",
    "    \n",
    "    avg_loss = test_loss / len(test_loader)\n",
    "    accuracy = 100. * correct / total\n",
    "    return avg_loss, accuracy  # 返回损失和准确率"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ece73cba",
   "metadata": {},
   "source": [
    "如果打印每一个bitchsize的损失和准确率，会看的更加清晰，更加直观"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "id": "d65a4326",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 7. 绘制每个 iteration 的损失曲线\n",
    "def plot_iter_losses(losses, indices):\n",
    "    plt.figure(figsize=(10, 4))\n",
    "    plt.plot(indices, losses, 'b-', alpha=0.7, label='Iteration Loss')\n",
    "    plt.xlabel('Iteration（Batch序号）')\n",
    "    plt.ylabel('损失值')\n",
    "    plt.title('每个 Iteration 的训练损失')\n",
    "    plt.legend()\n",
    "    plt.grid(True)\n",
    "    plt.tight_layout()\n",
    "    plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "id": "89c55627",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "开始训练模型...\n",
      "Epoch: 1/2 | Batch: 100/938 | 单Batch损失: 0.3580 | 累计平均损失: 0.6322\n",
      "Epoch: 1/2 | Batch: 200/938 | 单Batch损失: 0.2051 | 累计平均损失: 0.4777\n",
      "Epoch: 1/2 | Batch: 300/938 | 单Batch损失: 0.3124 | 累计平均损失: 0.4054\n",
      "Epoch: 1/2 | Batch: 400/938 | 单Batch损失: 0.1475 | 累计平均损失: 0.3672\n",
      "Epoch: 1/2 | Batch: 500/938 | 单Batch损失: 0.1780 | 累计平均损失: 0.3323\n",
      "Epoch: 1/2 | Batch: 600/938 | 单Batch损失: 0.3142 | 累计平均损失: 0.3107\n",
      "Epoch: 1/2 | Batch: 700/938 | 单Batch损失: 0.0472 | 累计平均损失: 0.2923\n",
      "Epoch: 1/2 | Batch: 800/938 | 单Batch损失: 0.0938 | 累计平均损失: 0.2765\n",
      "Epoch: 1/2 | Batch: 900/938 | 单Batch损失: 0.3006 | 累计平均损失: 0.2630\n",
      "Epoch 1/2 完成 | 训练准确率: 92.43% | 测试准确率: 95.83%\n",
      "Epoch: 2/2 | Batch: 100/938 | 单Batch损失: 0.1810 | 累计平均损失: 0.1363\n",
      "Epoch: 2/2 | Batch: 200/938 | 单Batch损失: 0.1757 | 累计平均损失: 0.1290\n",
      "Epoch: 2/2 | Batch: 300/938 | 单Batch损失: 0.1231 | 累计平均损失: 0.1282\n",
      "Epoch: 2/2 | Batch: 400/938 | 单Batch损失: 0.2033 | 累计平均损失: 0.1235\n",
      "Epoch: 2/2 | Batch: 500/938 | 单Batch损失: 0.0255 | 累计平均损失: 0.1206\n",
      "Epoch: 2/2 | Batch: 600/938 | 单Batch损失: 0.0688 | 累计平均损失: 0.1193\n",
      "Epoch: 2/2 | Batch: 700/938 | 单Batch损失: 0.0931 | 累计平均损失: 0.1172\n",
      "Epoch: 2/2 | Batch: 800/938 | 单Batch损失: 0.1466 | 累计平均损失: 0.1155\n",
      "Epoch: 2/2 | Batch: 900/938 | 单Batch损失: 0.0907 | 累计平均损失: 0.1141\n",
      "Epoch 2/2 完成 | 训练准确率: 96.61% | 测试准确率: 96.75%\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA90AAAGGCAYAAABmGOKbAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuNSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/xnp5ZAAAACXBIWXMAAA9hAAAPYQGoP6dpAACeIklEQVR4nO3dd3wT9f8H8FfapoNCKaVlr7IERUARRQQEAVEEVPyJLGWLIAIiyFCmMgRBRdkgOEAcCC5QQUUUERDZIMoUEKRgoYXSNm3u98fne8nlcpdcVpO0r+fj0UfbjMsn97lc7v0Z749JkiQJREREREREROR3EcEuABEREREREVFhxaCbiIiIiIiIKEAYdBMREREREREFCINuIiIiIiIiogBh0E1EREREREQUIAy6iYiIiIiIiAKEQTcRERERERFRgDDoJiIiIiIiIgoQBt1EREREREREAcKgm4iIgm7hwoWYPXs2JEnyy/beeOMNbNmyxS/bIv+7cOEC/vvvP6fbL168iL///tvlc7ds2YL169f7XIbr16/r3jd37lxcvnzZ5fOXLVuG6tWr+1wOpbS0NLzwwgs4evSoX7dLRETBxaCbiIiCKi0tDePGjcMvv/yCU6dO4eTJk5o/x44dw8GDB91u7/Dhw3juuecwZ86cAig9eeOTTz5B1apVce3aNYfbv/nmG6Smprqs58OHD+Phhx/GBx98YLvt2rVrWLp0KS5duuT0+I8//hiffvqp0+2tW7fGlClTnG4/evQohg0bht9//93le4iMjER+fr7DbTVr1kRkZCSioqIcfkwmE3JycjS38/3338NqtQIQDQHTpk3DuXPnXL42ERGFFwbdREQUNJIkoU+fPsjMzMR3332Hhg0buv1xt73BgwejQoUK+Oqrr/Ddd9/5pZwnT56EyWTCunXr/LK9YJHfx8mTJ4NajkOHDqFNmzaIj493uP2bb77BnXfeiZtuukn3uQMHDsRbb72FJ554whZM5+fnY8CAATh9+jQAYPTo0di2bRsA0TP+008/OWzj6NGj2LZtG1q0aAEAOHbsGP7880+cPHkS7733HmrVqoXq1avbGnsOHDiA9PR0h23IwbRSXFwcli1bhry8PNvP0aNHYTKZEBMT4/ReTp48idatW9t67qOiogAApUuXdr0DiYgorEQFuwBERFR0jRo1Ct988w02bNiANm3a+Ly96dOn49dff8Vvv/2G5cuXo1u3bti8eTNuvPFGP5RW3+bNm3Hy5En07t07oK/jyuXLl/H6669j+PDhSExM1HxMhQoVsHPnTlSoUKFgC/c/58+fx9WrV7Fnzx60bdvWNoy6SpUqyM3Nxdq1a3Hfffdh4cKFtudERUWhf//+DtsZMGAALl68aOspj42NBSCCXgBYv349br75Ztx5552IjIxEZGSkw/Pnz5+Pjh07omXLlrh8+TKefPJJ/PrrrzCbzcjIyEBcXJytgUeSJFgsFixfvhyPPfYY1q9fj99//x379+/HlStX8NJLL+HGG2/EI488AqvViqysLIeh6RkZGZAkCZIkOQXpK1asQIMGDdChQwcAQESE6Asxm822x1itVuTk5MBsNtuCciIiCjMSERFRAbNardIzzzwjmUwm6Z133pEeeughCYDLnzFjxrjc5sqVK6WIiAhp8eLFkiRJUm5urtSyZUspKSlJ2rZtm0/lPXHihARAWrt2reb9EydOlO6++26fXsNXchlPnDgR1HK40q1bN826PXTokLRkyRLJbDZLjRo1sv3Url1bKlGihKFtA5D++OMPSZIkqUGDBtJ7770nSZIkDRs2THruuedsj7t8+bJUqlQpac+ePbbHysfMv//+K0VGRkrHjx/XfZ2FCxdKnTt3lu644w6pWLFi0kMPPSS9+uqrkiRJUo0aNXSP3+vXrzts58qVK1JycrLb417++fjjjw3uZSIiCjUcXk5ERAXOZDKhTp06eOedd/DEE0/gypUrWLZsGdLT09G5c2e8//77SE9Pt/3cf//9SEpK0t3e7Nmz8cQTT2DSpEkYMGAAhg8fjjVr1uDLL79EvXr1cPfdd2PSpEnIzc0twHdJajExMejVq5et51ceDh4ZGYnZs2fjySefxG+//Wb7mTt3LqKjo23Pb9euHerWrYt69eph5MiRDts2mUyGEvFNnToV7dq1Q4MGDbB161YcPXoUjRo1QlpaGj744AM0aNAApUqVwuXLl21zrZUGDhyINWvWYMiQIUhJScHatWvx3HPP4fLly9i0aRNOnDih+aOevz558mSUKFECp0+fxrlz53Du3Dns2LEDAPDbb7/Zbjt79iyOHTuG++67z+P9TUREoYFBNxERBcXgwYPx+OOPAwCuXLmCChUqIDExEXXr1kXv3r2xYcMGJCYmIjExEbm5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yqBatWooX768be720aNHsXXrVqxduxZ//fUXPvnkE9t95cuXR2pqKtfvJiIKUwy6iYgoqP755x+kpKTY5uiOHDkSK1ascJgnfPXqVcTGxiI7OztYxXQpNjbWIaiS1axZEzExMcjMzETDhg3RsGFD1K1bF6+99ppTL6+etWvX4urVq9i4cSOefvppNGnSBH/++admGQBolsOdxo0b4/Tp07ZgEwC+//57W6+rTC8Rmj+9+OKL+OabbwCIek9ISNB83JUrV9C6dWt88803WLVqlcOcfq2s47KUlBQ0a9YM5cqVw7PPPott27ahfv36SExMxN133421a9faHnvx4kXUrl0bu3fvtt2ml6ytbNmyuOmmmwCIdduV++2WW25BzZo1dct04sQJdO3aFQMHDsSDDz6I+fPnY/jw4ZgxY4bL90JEROGBidSIiCioTp48ifPnz7vNPF2zZk00atTIYbhzqLjjjjswZcoUfPrpp0hOTsbu3bsxbNgwxMXF4fnnn8ekSZMQExODunXrYtGiRfjiiy8wefJkQ9tOTk6GxWLBsmXLULt2bSxfvhwffvgh7rrrLofHlStXDlWqVMEbb7yB7t27488//0Tjxo1x4403un2Nrl27YubMmXj44Ycxbdo0XLhwASNHjkSfPn10h0h76+rVq7bs6coM5LLq1avb/k5PT9cMuq9fv441a9agXbt2yM7OxoULF9CjRw/b/coh79L/lieTTZgwwZYlfc+ePfjkk09w//33Y+XKlTh69Cjq169ve2xycjKaNGmCbt264ffff3fZ6/7UU08BAPbv34/Fixdj8eLFGD16NKKiojB27Fjd7ONff/01+vbti/r16+ONN94AAHTv3h0mkwm9evXCBx98gEmTJuGhhx5y+xkhIqLQxJ5uIiIKqvbt2zvM31b/fP7554iLi8OFCxewfv16Q9u0Wq0F2kPYqlUrvPDCCxg8eDDatGnjUM6JEydi6NCheOmll3Dffffh1KlT+Oabb1CtWjVD2+7atattaauHH34Yubm5GD9+PA4cOIArV644PPbDDz/Ezz//jLvvvhsvvPCC4XXJ4+Li8P333+OGG27AY489hjFjxuDJJ5+0ZWP3F6vVijVr1tiW0brzzjttt2s5fPiw05z9/Px87NixA5UqVcJbb72Fp59+Gv3793cYej1s2DDccsstAEQGdHk/ZGVl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g24iIiIiIpLFx8cjMTERERERKF68OBITExETEwMA+PDDD9GwYUP0798ftWrVwuDBg/H55587PL9kyZJ477330Lp1a1vwXKNGDZw/fx5NmzbFn3/+CYvFgiNHjgAASpQoYUvmlpCQgMTERJjNZrflXLp0KXr06IGHHnoIderUwezZs7F48WJbD3NUVBQWLVqE1NRUPPHEEzh9+rRP+2Xx4sUYPnw4WrZsiVtvvRWTJk3CwoULAQBxcXEAxPraN910E44fP442bdrY7pMkCXl5ebjzzjuRnp6O2rVr+1QWV9jTHULY001ERERE5H8xMaLHOVivHUhnzpzB7t27bUFyXl4eihcv7vCYZ555xul5169fx4ABA/DTTz+hQYMGiIyMRL6Pgcjp06fRokUL2/81atTA9evXkZaWBgBo0qSJrbEgOjraFoz78nrVq1d3eL2///4bAHD33Xfj+eefR58+fXDu3Dk8+uijmD17NooVK4Zu3brh4MGD6NSpE65du4ZevXph6tSpPpXFFfZ0hxAmUiMiIiIi8j+TSQzxDsaPyY/pmiIiIpwC1UqVKqFjx47Ys2cP9uzZg71792Ljxo0Oj9EaGv7GG2/gypUrOHfuHL777jvceeedGvvN5FFgXKVKFRw/ftz2//HjxxEXF4eUlBQAotfcn7Rer2rVqra/O3fujP379+PAgQPYunWrrRf86NGjePrpp/HXX3/hp59+wooVK7Bu3Tq/lk2JQXcIYU83ERERERHpqVGjBr799lucO3cOP/74IwCga9eu+Omnn/DXX38hJiYGb775Jvr06eN2W5mZmbBarUhLS8OqVauwYMECpwC7Ro0a2LBhA86ePWto7nX//v2xcuVKrFu3DkeOHMGIESMwcOBAW1I2b129ehVnzpyx/fzzzz8AgAEDBuD111/Hjz/+iN27d2PixIl46qmnAACbNm3Cww8/jN27d+P69esAxCgAAHj//ffRu3dvHDp0yJZ0Tr4vEBh0hxA56GZPNxERERERqc2aNQtfffUVqlWrhhkzZgAQgfG7776LESNGoGbNmti3bx8++OADt9saPnw4cnJyULt2bSxfvhz9+vXDnj17HB6zYMECzJ49G6mpqVi0aJHbbd5222145513MHr0aNx1111o1KgRpk+f7tV7VVq2bBkqV65s+5HnXz/yyCOYMGECnnjiCbRv3x49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REREROGNQXcIMpvFb/Z0ExERERERhTcG3SGIPd1ERERERESFA4PuEMSebiIiIiIiosKBQXcIMptFBnP2dBMREREREYU3Bt0hSB5ezp5uIiIiIiKi8MagOwRxeDkREREREVHhwKA7BDGRGhERERERUeHAoDsEcXg5ERERERFR4cCgOwQx6CYiIiIiIiocGHSHIHlON4eXExERERERhTcG3SGIidSIiIiIiIgKBwbdIYjDy4mIiIiIiAoHBt0hiMPLiYiIiIiICgcG3SGIw8uJiIiIiIgKBwbdIYjrdBMRERERERUODLpDkNksAWBPNxERERERUbhj0B2CIiPFb/Z0ExERERERhTcG3SGIc7qJiIiIiIgKBwbdIYhzuomIiIiIiAoHBt0hiD3dREREREREhQOD7hDEnm4iIiIiIqLCgUF3CGJPNxERERERUeHAoDsEsaebiIiIiIiocGDQHYLY001ERERERFQ4MOgOQXJPN4NuIiIiIiKi8MagOwTFxEgAgJycIBeEiIiIiIiIfMKgOwTFxorf2dnBLQcRERERERH5hkF3CGLQTUREREREVDgw6A5BcXHiN4NuIiIiIiKi8MagOwTFxIjf168DkhTcshAREREREZH3GHSHILmnW5KYwZyIiIiIiCicMegOQXJPNyB6u4mIiIiIiCg8MegOQRER9sCb87qJiIiIiIjCF4PuECVnMGdPNxERERERUfhi0B2iuGwYERERERFR+GPQHaLMZvE7Ly+45SAiIiIiIiLvMegOUVFR4jeDbiIiIiIiovDFoDtEsaebiIiIiIgo/AUt6L548SJSU1Nx8uRJQ4/v1KkTTCaT7adNmzaBLWCQsaebiIiIiIgo/EUF40UvXryIDh06GA64AeC3337D/v37UalSJQCAWe4KLqQYdBMREREREYW/oPR0d+3aFd27dzf8+LNnz0KSJNSrVw+JiYlITExEfHx8AEsYfJGR4rfFEtxyEBERERERkfeCEnQvWbIEQ4cONfz4HTt2ID8/H5UqVUJ8fDy6du2K9PT0AJYw+Dinm4iIiIiIKPwFZXh5amqqR4//448/0KBBA7z66quIiIhA//79MXbsWCxcuFD3OTk5OcjJybH9n5GRAQCwWCywhGj3sVwui8UCkykCVqsJ2dlWWCxSkEtGRijrj8IL6y68sf7CG+svfLHuwhvrL7yx/kKD0f1vkiQpaBGdyWTCiRMnUK1aNY+et2XLFnTu3BkXL17UfcykSZMwefJkp9tXrVqFYsWKeVrUAvfppzVx6FBp3HvvSdx++7/BLg4REREREREpZGVloXv37rhy5QoSEhJ0HxeWQfcff/yBunXrIjs7GzExMZqP0erprly5Mi5evOhyhwSTxWLBxo0b0bZtW8ybF4PNm03o3duKhx5iT3c4UNZfYU/0V9iw7sIb6y+8sf7CF+suvLH+whvrLzRkZGQgOTnZbdAdlOHlnnrsscfwzDPPoFmzZgCAbdu2oWzZsroBNwDExMRo3m82m0P+wDSbzYiJiUREBABEIMSLSyrhcIyRNtZdeGP9hTfWX/hi3YU31l94Y/0Fl9F9H7R1urVkZGRojou/+eab8eyzz+Lnn3/GunXrMHbsWAwaNCgIJSw4TKRGREREREQU/kIq6K5fvz6++uorp9tHjx6N+vXr47777sOgQYMwePBgvPDCC0EoYcGRlwxj0E1ERERERBS+gjq8XD2d/OTJk5qPM5vNWLZsGZYtW1YApQoNUf+rGSYkJCIiIiIiCl8h1dNNdhxeTkREREREFP4YdIcouaebQTcREREREVH4YtAdohh0ExERERERhT8G3SGKQTcREREREVH4Y9Adohh0ExERERERhT8G3SGKidSIiIiIiIjCH4PuEMV1uomIiIiIiMIfg+4QxXW6iYiIiIiIwh+D7hDF4eVEREREREThj0F3iJJ7ug8cAM6cCW5ZiIiIiIiIyDsMukOUHHQDwLhxwSsHEREREREReY9Bd4hSBt3p6cErBxEREREREXmPQXeIUgbdREREREREFJ4YdIcoBt1EREREREThj0F3iGLQTUREREREFP4YdIcoBt1EREREREThj0F3iJLX6SYiIiIiIqLwZTjoXrhwIaxWq8vH5ObmombNmj4XitjTTUREREREVBgYDu2mTZuGAQMG4NNPP0VGRgYiIpzjdUmSkJeX59cCFlUMuomIiIiIiMKf4Z7uqKgoREZGYvr06di+fTuGDRuGbdu2YcSIEbbfv/76q2YwTp5j0E1ERERERBT+DEXI2dnZtr9NJhMWLFiA5ORkLFiwAOXLl3f4LUlSwApblDDoJiIiIiIiCn9uQ7tr164hJSUFeXl5aNq0Kf766y8AIvjW+k3+waCbiIiIiIgo/Lnt6Y6Ojsbnn3+O5ORkPP3000hMTCyAYpE66OYAAiIiIiIiovDjNug2m81o06YNYmNj0aNHDyQnJ2Px4sXIyMjA4sWLkZ6e7vCbPd7+oZ4a/++/wSkHERERERERec9w1rO8vDxYrVbce++92Lp1K+6//35s27YNbdq0cfjNOd3+oW67OHUqOOUgIiIiIiIi7xmaOfzFF19gypQpAICpU6fqPi4vLw+VK1f2T8kIEyYA/9vtOHUKuOOO4JaHiIiIiIiIPOM26E5PT0evXr1QtmxZZGVloVy5crqPzc3NxVNPPeXXAhZljRsDvXoB77zDnm4iIiIiIqJw5DboLlWqFM6dO4fPPvsMU6dOxYEDB1C2bFncdtttTkPJ8/PzYbFYAlbYoqhqVfGbQTcREREREVH4MTS8PCYmBl26dEGXLl2wbNkyjBw5EomJiVi4cCGKFSsW6DIWaSkp4vfly0EtBhEREREREXnBcCI1Wb9+/bBnzx40atSIAXcBiIwUv63W4JaDiIiIiIiIPOdx0A0AVatWxbBhw/xdFtIgLx3GoJuIiIiIiCj8eBV0AyJTef/+/R1umzVrFpYvX+5zociOQTcREREREVH48ijozsnJQa9evQAAkZGRWL16tcP9S5cuxcGDB/1XOmLQTUREREREFMY8CrojIyPx2WefAQBMJhPi4uJs961duxbnzp3DyJEj/VvCIs5kEr8ZdBMREREREYUfj4LuqKgomM1m2/+m/0WEly9fxqhRo/DSSy+5XMebPMeebiIiIiIiovDl8ZxuOdCWXbx4EY888gjuuOMOJlcLAAbdRERERERE4cvQOt3vvPMOYmJiEBcXh9zcXGzatAnFixfH1atXUa9ePXTr1g0zZ84MdFmLJHnJMEkSP6o2DyIiIiIiIgphhoLutWvXIisrCxEREbh+/TqmTJmCS5cuITs7G6VKlUK7du0chp2T/0QoxiIw6CYiIiIiIgovhoLudevW2f5OSUnBli1bAADJycmYOnUqBg4ciCeeeAIvvfRSQApZlCmDbqvV8X8iIiIiIiIKbYZDuPPnzwNwnNMdERGB3r17Y9u2bVizZg2mTZvm/xIWceqgm4iIiIiIiMKHoZ5uAGjdujXKli0Lq0bkV6FCBXz++ee49dZbcc8996BJkyZ+LWRRxqCbiIiIiIgofBnu6d61axf69OmD5ORktG3bFmfPnkVeXp7t/po1a+L555/HqFGjAlLQokoZdOfnB68cRERERERE5DnDQXdsbCwef/xxHDhwALfeeiu+++47XL161eExAwcOxPnz5/Hff//5vaBFlTJxGnu6iYiIiIiIwovh4eW2J0RF4ZVXXgEANGvWzOG+5ORkfP/990hKSvJP6ci2ZBjAoJuIiIiIiCjceBx0A8CCBQsQEREBk8mE/Px8REdHo1+/fpg7dy7WrFljy25OvlP2dEtS8MpBREREREREnjMUdMfHxyM2NhYWiwVbt27FuHHj8NBDD9nuT0lJwfnz5zFlyhRs3LgxUGUtsiIiRC83e7qJiIiIiIjCi6Ggu3r16ti/fz+6desGq9UKk8mE5cuXOzymX79+6Nu3L2699daAFLQoY9BNREREREQUngwF3fLa3Mo1uq9du4Z+/fqhYcOGaNCgAZ588knUrFkzMKUs4uQM5gy6iYiIiIiIwovh7OUAICkmFefm5qJ27dpIS0vDq6++iv/7v//D4cOH/V5AsgfdXDKMiIiIiIgovBjq6b527Rq+//57XLhwwXZbqVKlMGXKFNv/69evx4MPPojt27ezx9vP5Azm7OkmIiIiIiIKL4Z6usuWLYupU6ciOzsbxYoVgyRJuOeee2w/nTp1Qvv27TF48GCMHTvW0AtfvHgRqampOHnypKHH//jjj6hbty6Sk5MxZ84cQ88pLDi8nIiIiIiIKDwZ6un+5ZdfHP5ftWoVTCYTTCYTrFarbdj54MGDUbVqVaSnp6NUqVK627t48SI6dOhgOOBOS0tDp06d8Nxzz6Fbt27o2rUrbrnlFrRq1crQ88OdPJWeQTcREREREVF4MbxOt9VqRVxcHHJyctC8eXM0b94cO3bsgNlstj2mfPny2LRpk8uAGwC6du2K7t27Y/v27YZee+XKlahQoQLGjx8Pk8mECRMmYNmyZUUm6JZ7urlONxERERERUXgxFHSPGDECsbGxAIBx48YBANLT09G7d29UrVrV9rjY2Fj07NnT7faWLFmC1NRUDBs2zFAh9+7di1atWtmyp99+++0YM2aMoecWBhxeTkREREREFJ4MBd2xsbGIiYlBZGQkYmJiAAAtW7bE+vXr8fTTT9set337dhw8eBAffvihy+2lpqZ6VMiMjAzceOONtv8TEhLwzz//uHxOTk4OcnJyHLYBABaLBRaLxaPXLyhyuZzLFwmrFcjOzkeIFp3gqv4o1LHuwhvrL7yx/sIX6y68sf7CG+svNBjd/yZJMj5oOT4+HteuXQMAZGZmIjk5GXv27EHdunUBABs2bMDy5cvx0UcfGXtxkwknTpxAtWrVXD7usccew1133YWhQ4cCAPLz8xEbG+vyTU6aNAmTJ092un3VqlUoVqyYofKFijffbIgrV2LQp89BVKx4NdjFISIiIiIiKvKysrLQvXt3XLlyBQkJCbqPMzynW5IkLF++3PZ/iRIl8O677zps/P7778f999/vZZH1JSUlIS0tzfZ/ZmYmoqOjXT5n7NixGDFihO3/jIwMVK5cGffee6/LHRJMFosFGzduRNu2bR3myn/xRSTOnQOaNSuN/7VvUAjSqz8Kfay78Mb6C2+sv/DFugtvrL/wxvoLDfJoancMB90mkwldunRxuO2xxx7zrFReaty4MVatWmX7f/fu3ahYsaLL58TExNiGwiuZzeaQPzDVZYyKEvO6IyMjEOJFJ4THMUbaWHfhjfUX3lh/4Yt1F95Yf+GN9RdcRve9oXW6C0pGRobmkPFOnTph69at2LRpEywWC2bOnIl27doFoYTBwURqRERERERE4Smkgu769evjq6++cro9OTkZr732Gtq3b4+yZcviyJEjePHFF4NQwuBg0E1ERERERBSeDA8vDwR1DreTJ0/qPvapp55Cu3bt8Mcff6B58+YoXrx4gEsXOv63UhqDbiIiIiIiojAT1KDbU6mpqR4vN1YYsKebiIiIiIgoPIXU8HLSFhkpfjPoJiIiIiIiCi8MusMAe7qJiIiIiIjCE4PuMMCgm4iIiIiIKDwx6A4DDLqJiIiIiIjCE4PuMMCgm4iIiIiIKDwx6A4DciK1r74C0tKCWxYiIiIiIiIyjkF3GChdWvw+eBAYPjyoRSEiIiIiIiIPMOgOA+XL2//OyAheOYiIiIiIiMgzDLrDgDLoJiIiIiIiovDBoDsMJCUFuwRERERERETkDQbdYSA+PtglICIiIiIiIm8w6A4DDLqJiIiIiIjCE4PuMMCgm4iIiIiIKDwx6A4DxYoFuwRERERERETkDQbdYcBkCnYJiIiIiIiIyBsMuomIiIiIiIgChEF3mGjd2v63JAWvHERERERERGQcg+4w8eST9r/z8oJXDiIiIiIiIjKOQXeYiI62/52bG7xyEBERERERkXEMusNEZKQ9oZrFEtyyEBERERERkTEMusOEyQSYzeJv9nQTERERERGFBwbdYUQOutnTTUREREREFB4YdIcReV43e7qJiIiIiIjCA4PuMCL3dB8+DLzzDpCdHdzyEBERERERkWtRwS4AGSf3dC9YIH5bLED//sErDxEREREREbnGnu4wolw2DBA93kRERERERBS6GHSHEXl4uYxzu4mIiIiIiEIbg+4wou7pzskJTjmIiIiIiIjIGAbdYYRBNxERERERUXhh0B1G1MPLGXQTERERERGFNgbdYUTd052XB0gScPas+E1EREREREShhUF3GNFKpPb228BTTwFr1/r3tTZvBvbv9+82iYiIiIiIihoG3WHEZHL8X5KAdevE38uX++91/v4bmD0bGDfOf9skIiIiIiIqihh0h5GzZwvmddLS9O87d04MayciIiIiIiL3GHSHEVfBcEHYvRt48klg/PjgloOIiIiIiChcMOgOIw0aePe88+eB//7z/fW/+kr8PnDA920REREREREVBQy6w0i/fp4/5+pVYMAAoFcv31/fYvF9GwXJagXGjgXmzAl2SYiIiIiIqKhi0B1GSpRwfb/Wut2nT9v/9mZZMeVzwi3oPnpU9Mr/8EOwS0JEREREREUVg+5CZPBg59uUgbjV6vk2lc8JtwRq3rxfIiIiIiIif2LQXYhcuOB8mzLozs93vl+SnG9XLk0mB67//gscPux7GQuSeok1IiIiIiKigsagu5Bz19P94otA375Abq728+XnDB3q/7J5QpJ862n3Zmg9ERERERGRrxh0FzKTJongNDsbOHlS/JZp9XTv2ycym+v1Ylutopc7K8v7MqWnAytWiDW+vTV2LDBwoH7jgDsMuomIiIiIKBiigl0A8q9du4AdO4D33xdJ1O64w36fVtAt0xuKvWEDsHy5b2V69VUR3G/aJMp17hywZAnw6KNA3bruny9JwMGD4u9jx4w9R81qBSLYxERERERERAWMYUghZLHYs5Zv326/XR10K3t/9QLSFSt8L8+hQ+L3lSvi94wZwM6dwPPPG3v+9ev2v+PivCsDe7o9d+EC9xsRERERka8YdBdCJ05o364Mui9dAjZvtv+v7OlWBlr+SEamDtz+/dez5yuHtpvN/ikDufbFF2Jd+GXLgl0SIiIiIqLwxuHlhdCaNdq3KxOpDRrk2IOslbFcfbu/eLqU19Wr3j/X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VqBTp04Ot7Vp08b2PNZfcF28eBGpqak4efKk7TZvP2+ffPIJqlatigoVKuCDDz4oqLdQpGnVn953IMDvwVCiVXfe1g/PowVPXX+uvgMB8HswnEgUdNnZ2VK1atWkgQMHSkePHpXat28vvf3228EuFikcPXpUKlWqlPThhx9K58+flx599FGpadOmkiRJ0p133il99dVXUnp6upSeni5lZGRIksR6DSVadeSqfi5cuCAlJCRIkydPlv7880/p1ltvlb7//vsgv4uiKScnx1Zv6enp0unTp6Xk5GTp6NGjUvny5aX9+/fb7rt69aokSay/YEtLS5PuuOMOCYB04sQJSZJcnw9d1df+/ful6OhoacmSJdK+ffukmjVrSn/88Uew3lqRoFV/rr4DJYnfg6FCq+4kybv64Xm04GnVn6vvQEmS+D0YRhh0h4C1a9dKpUqVkq5duyZJkiTt2bNHuuuuu4JcKlL64osvpEWLFtn+//7776W4uDjJYrFICQkJUmZmptNzWK+hQa+OXNXPa6+9JtWpU0eyWq2SJEnSunXrpB49ehRswUnT1KlTpQEDBkhnzpyRypUrp/kY1l9wtW7dWnrjjTccLhy9/bwNGzZMateunW3br7/+uvTCCy8U4LsperTqT+87UJL0z7GSxO/BgqZVd97WD8+jBU+r/tTk70BJkvg9GGY4vDwE7N27F02aNEGxYsUAAPXr18ehQ4eCXCpS6tChA5588knb/0eOHEGtWrWwf/9+WK1WNGzYEHFxcbjvvvvw999/A2C9hgq9OnJVP3v37kWrVq1gMpkAALfffjt27doVtPdAQnZ2Nt544w2MGzcOO3bsQH5+PipVqoT4+Hh07doV6enpAFh/wbZkyRIMHTrU4TZvP2979+7FPffcY9sO6zLwtOpP7zsQ0D/HAvweLGhadedt/fA8WvC06k9J+R0IgN+DYYZBdwjIyMhAamqq7X+TyYTIyEjbB4dCS25uLmbPno2nnnoKhw4dwg033ID33nsP+/btQ1RUlO3ChPUaGvTqyFX9qO9LSEjAP//8E4zik8KqVatwxx13oFq1avjjjz/QoEEDfPXVV/j1119x4sQJjB07FoDzZ4/1V7CU+17m7eeNdVnwtOpPSfkdCOifYwF+DxY0rbrztn742St47j57yu9AAPweDDNRwS4AAVFRUYiJiXG4LTY2FllZ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+09zeHleXh5uueUW3ffetWvXAh11QEREhRODbiIiKrLWrFmD9PR0VK5cGV988QXS09Px7LPPAgCOHj2KBx98EMOGDcPOnTuxY8cOzJo1y+H548ePx5kzZ7By5UrbkOqDBw9i0KBBWLp0KQ4dOoRLly5h/vz5AICdO3ciPT0dALB3716kp6fjkUcecVvOnTt3olevXnjllVfw888/47fffsOYMWNs969fvx7Hjx/H7t27cdddd2Hs2LGG3v+ZM2dQtWpVzfvGjh2LxMREJCUlITMzExMmTAAALFq0CJ9//jl+/fVXfPfdd1iwYAF27NiBsmXLIj09HV988QUqV66M9PR0pKeno2zZsgCAWbNmYc2aNfj666/x1VdfYcGCBVi3bp3t9V566SU0b94ce/fuxZUrVzBv3jzbfVevXkVMTIzt/+LFi6NevXq45557cP36dezcuRMPPfSQQ/nr1q2LMmXKoFq1aihfvjzKli2r2dtdtWpVlCpVCu+9957TPqhatSpOnz5taF8SERHpcT3RiYiIqBCLj48HAERERKB48eIOSdY+/PBDNGzYEP379wcADB48GG+//bbDnOGSJUs6BWs1atTA+fPnERsbi+3bt8NiseDIkSMAgBIlStgel5CQYDip29KlS9GjRw9bYDl79my0bdsWr732GgAx/HrRokWIiYnBE088gYEDBxrabkJCAjIyMjTvGzVqFPr27YuTJ0/imWeeweTJkzFjxgz07NkTPXv2RFZWFvbu3YvIyEgcOXIEt99+OxITE1G8eHFEREQ4vbfly5dj8uTJaNiwIQDR4JGUlGS7v2nTphg6dCgA4MEHH3QIdi9fvoyGDRvi3nvvxdmzZ22jBYoVK4aNGzfi5ptvtj127ty5uOeee3D48GHbbQMHDkTFihVtDQdGZWRkoGTJkh49h4iISI1BNxERkYYzZ85g9+7dtuAxLy/Paa71M8884/S869evY8CAAfjpp5/QoEEDREZGIj8/36eynD59Gi1atLD9X6NGDVy/fh1paWkAgCZNmth6gqOjozWTg2mpW7cutm3bhtatWzvdp1xma9KkSejXrx9mzJiBEydOoG/fvjh//jyaNGmC+Ph4Q+/v9OnTqF69uu3/5s2bO9yvHFKvfg///vsvatSogS+++AJmsxkREWKg3n333YchQ4agQ4cO2Lx5Mx566CE0bdrU6bW///57LFq0yG0Z1X799VfceOONHj+PiIhIicPLiYioyIuIiHAKVCtVqoSOHTtiz5492LNnD/bu3YuNGzc6PEbuKVd64403cOXKFZw7dw7fffcd7rzzTqfHmEwmw4ExAFSpUsVh+arjx48jLi4OKSkpAESPtTe6du2KpUuXul0OzGq12gLrYcOG4f7778fZs2exZs0aJCcnOzxWa18CQOXKlR0yts+cOdOh51nvPVgsFhw4cAA1atRATEyMLeBWq1KlClauXInY2FiH28+fP4/Lly+jS5cuSE5Odvgxm82YO3eu5vauXbuGpUuXup3zTkRE5A6DbiIiKvJq1KiBb7/91hYoAyIg/emnn/DXX38hJiYGb775Jvr06eN2W5mZmbBarUhLS8OqVauwYMECpyC0Ro0a2LBhA86ePYstW7a43Wb//v2xcuVKrFu3DkeOHMGIESMwcOBA2zBrb5UvXx6PP/44nnrqKaf7rl+/jvT0dOzevRszZ8609UxnZmbCYrHgzJkzmDBhAnbu3Onw/qpXr45//vkHu3fvxtGjR7F7924AQN++fTFp0iTs3bsXu3btwptvvom6deu6LeN3332HqKgo1KlTx+XjqlevjgceeMDp9nLlyiEtLQ0XL150+qlQoYJtuLvaU089hR49eqBixYpuy0hEROQKg24iIiryZs2aha+++gpVqlTBpEmTAIjA+N1338WIESNQs2ZN7Nu3Dx988IHbbQ0fPhw5OTmoXbs2li9fjn79+mHPnj0Oj1mwYAFmz56N1NRUQ8Oeb7vtNrzzzjsYPXo07rrrLjRq1AjTp0/35q06mTBhAi5fvoxevXrBarXabh83bhySkpLQpk0bVK9eHUuWLAEAvPLKK/jkk09Qv359nD9/Hm3btrUF1oAYITB9+nS0adMGDRo0wC+//AIAGDlyJB5++GHce++96NixI5566il069bNbfneeustdOrUCZGRkbbbzpw5g507d+LYsWNOPduuXL9+Hfv27cPBgwexevVq/PPPP05Bt9VqxRNPPIHLly/bjgUiIiJfmCRPxrcRERFRoZOfn4+PP/44JIdSHzhwANHR0ahdu7btts2bN6NTp05o1KgR1q5dazghXW5uLqpUqYIrV66gWrVq6NevH0aOHOn0uA8++ABdunRxCPSJiIi8xaCbiIiIiozc3FxER0cHuxhERFSEMOgmIiIiIiIiChDO6SYiIiIiIiIKEAbdRERERERERAHCoJuIiIiIiIgoQBh0ExEREREREQUIg24iIiIiIiKiAGHQTURERERERBQgDLqJiIiIiIiIAoRBNxEREREREVGAMOgmIiIiIiIiCpD/BzEKEkRnu7bfAAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 1000x400 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练完成！最终测试准确率: 96.75%\n"
     ]
    }
   ],
   "source": [
    "# 8. 执行训练和测试（设置 epochs=2 验证效果）\n",
    "epochs = 2  \n",
    "print(\"开始训练模型...\")\n",
    "final_accuracy = train(model, train_loader, test_loader, criterion, optimizer, device, epochs)\n",
    "print(f\"训练完成！最终测试准确率: {final_accuracy:.2f}%\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a44f3926",
   "metadata": {},
   "source": [
    "在PyTorch中处理张量（Tensor）时，以下是关于展平（Flatten）、维度调整（如view/reshape）等操作的关键点，这些操作通常不会影响第一个维度（即批量维度`batch_size`）：\n",
    "\n",
    "### 图像任务中的张量形状\n",
    "输入张量的形状通常为：  \n",
    "`(batch_size, channels, height, width)`  \n",
    "例如：`(batch_size, 3, 28, 28)`  \n",
    "其中，`batch_size` 代表一次输入的样本数量。\n",
    "\n",
    "### NLP任务中的张量形状\n",
    "输入张量的形状可能为：  \n",
    "`(batch_size, sequence_length)`  \n",
    "此时，`batch_size` 同样是第一个维度。\n",
    "\n",
    "\n",
    "### 1. **Flatten操作**\n",
    "- **功能**：将张量展平为一维数组，但保留批量维度。\n",
    "- **示例**：  \n",
    "  - **输入形状**：`(batch_size, 3, 28, 28)`（图像数据）  \n",
    "  - **Flatten后形状**：`(batch_size, 3×28×28)` = `(batch_size, 2352)`  \n",
    "  - **说明**：第一个维度`batch_size`不变，后面的所有维度被展平为一个维度。\n",
    "\n",
    "\n",
    "### 2. **view/reshape操作**\n",
    "- **功能**：调整张量维度，但必须显式保留或指定批量维度。\n",
    "- **示例**：  \n",
    "  - **输入形状**：`(batch_size, 3, 28, 28)`  \n",
    "  - **调整为**：`(batch_size, -1)`  \n",
    "  - **结果**：展平为两个维度，保留`batch_size`，第二个维度自动计算为`3×28×28=2352`。\n",
    "\n",
    "\n",
    "### 总结\n",
    "- **批量维度不变性**：无论进行flatten、view还是reshape操作，第一个维度`batch_size`通常保持不变。\n",
    "- **动态维度指定**：使用`-1`让PyTorch自动计算该维度的大小，但需确保其他维度的指定合理，避免形状不匹配错误。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6bf49aa1",
   "metadata": {},
   "source": [
    "下面是所有代码的整合版本"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "id": "eabaa20d",
   "metadata": {},
   "outputs": [],
   "source": [
    "# import torch\n",
    "# import torch.nn as nn\n",
    "# import torch.optim as optim\n",
    "# from torchvision import datasets, transforms\n",
    "# from torch.utils.data import DataLoader\n",
    "# import matplotlib.pyplot as plt\n",
    "# import numpy as np\n",
    "\n",
    "# # 设置中文字体支持\n",
    "# plt.rcParams[\"font.family\"] = [\"SimHei\"]\n",
    "# plt.rcParams['axes.unicode_minus'] = False  # 解决负号显示问题\n",
    "\n",
    "# # 1. 数据预处理\n",
    "# transform = transforms.Compose([\n",
    "#     transforms.ToTensor(),  # 转换为张量并归一化到[0,1]\n",
    "#     transforms.Normalize((0.1307,), (0.3081,))  # MNIST数据集的均值和标准差\n",
    "# ])\n",
    "\n",
    "# # 2. 加载MNIST数据集\n",
    "# train_dataset = datasets.MNIST(\n",
    "#     root='./data',\n",
    "#     train=True,\n",
    "#     download=True,\n",
    "#     transform=transform\n",
    "# )\n",
    "\n",
    "# test_dataset = datasets.MNIST(\n",
    "#     root='./data',\n",
    "#     train=False,\n",
    "#     transform=transform\n",
    "# )\n",
    "\n",
    "# # 3. 创建数据加载器\n",
    "# batch_size = 64  # 每批处理64个样本\n",
    "# train_loader = DataLoader(train_dataset, batch_size=batch_size, shuffle=True)\n",
    "# test_loader = DataLoader(test_dataset, batch_size=batch_size, shuffle=False)\n",
    "\n",
    "# # 4. 定义模型、损失函数和优化器\n",
    "# class MLP(nn.Module):\n",
    "#     def __init__(self):\n",
    "#         super(MLP, self).__init__()\n",
    "#         self.flatten = nn.Flatten()  # 将28x28的图像展平为784维向量\n",
    "#         self.layer1 = nn.Linear(784, 128)  # 第一层：784个输入，128个神经元\n",
    "#         self.relu = nn.ReLU()  # 激活函数\n",
    "#         self.layer2 = nn.Linear(128, 10)  # 第二层：128个输入，10个输出（对应10个数字类别）\n",
    "        \n",
    "#     def forward(self, x):\n",
    "#         x = self.flatten(x)  # 展平图像\n",
    "#         x = self.layer1(x)   # 第一层线性变换\n",
    "#         x = self.relu(x)     # 应用ReLU激活函数\n",
    "#         x = self.layer2(x)   # 第二层线性变换，输出logits\n",
    "#         return x\n",
    "\n",
    "# # 检查GPU是否可用\n",
    "# device = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n",
    "\n",
    "# # 初始化模型\n",
    "# model = MLP()\n",
    "# model = model.to(device)  # 将模型移至GPU（如果可用）\n",
    "\n",
    "# criterion = nn.CrossEntropyLoss()  # 交叉熵损失函数，适用于多分类问题\n",
    "# optimizer = optim.Adam(model.parameters(), lr=0.001)  # Adam优化器\n",
    "\n",
    "# # 5. 训练模型（记录每个 iteration 的损失）\n",
    "# def train(model, train_loader, test_loader, criterion, optimizer, device, epochs):\n",
    "#     model.train()  # 设置为训练模式\n",
    "    \n",
    "#     # 新增：记录每个 iteration 的损失\n",
    "#     all_iter_losses = []  # 存储所有 batch 的损失\n",
    "#     iter_indices = []     # 存储 iteration 序号（从1开始）\n",
    "    \n",
    "#     for epoch in range(epochs):\n",
    "#         running_loss = 0.0\n",
    "#         correct = 0\n",
    "#         total = 0\n",
    "        \n",
    "#         for batch_idx, (data, target) in enumerate(train_loader):\n",
    "#             data, target = data.to(device), target.to(device)  # 移至GPU(如果可用)\n",
    "            \n",
    "#             optimizer.zero_grad()  # 梯度清零\n",
    "#             output = model(data)  # 前向传播\n",
    "#             loss = criterion(output, target)  # 计算损失\n",
    "#             loss.backward()  # 反向传播\n",
    "#             optimizer.step()  # 更新参数\n",
    "            \n",
    "#             # 记录当前 iteration 的损失（注意：这里直接使用单 batch 损失，而非累加平均）\n",
    "#             iter_loss = loss.item()\n",
    "#             all_iter_losses.append(iter_loss)\n",
    "#             iter_indices.append(epoch * len(train_loader) + batch_idx + 1)  # iteration 序号从1开始\n",
    "            \n",
    "#             # 统计准确率和损失（原逻辑保留，用于 epoch 级统计）\n",
    "#             running_loss += iter_loss\n",
    "#             _, predicted = output.max(1)\n",
    "#             total += target.size(0)\n",
    "#             correct += predicted.eq(target).sum().item()\n",
    "            \n",
    "#             # 每100个批次打印一次训练信息（可选：同时打印单 batch 损失）\n",
    "#             if (batch_idx + 1) % 100 == 0:\n",
    "#                 print(f'Epoch: {epoch+1}/{epochs} | Batch: {batch_idx+1}/{len(train_loader)} '\n",
    "#                       f'| 单Batch损失: {iter_loss:.4f} | 累计平均损失: {running_loss/(batch_idx+1):.4f}')\n",
    "        \n",
    "#         # 原 epoch 级逻辑（测试、打印 epoch 结果）不变\n",
    "#         epoch_train_loss = running_loss / len(train_loader)\n",
    "#         epoch_train_acc = 100. * correct / total\n",
    "#         epoch_test_loss, epoch_test_acc = test(model, test_loader, criterion, device)\n",
    "        \n",
    "#         print(f'Epoch {epoch+1}/{epochs} 完成 | 训练准确率: {epoch_train_acc:.2f}% | 测试准确率: {epoch_test_acc:.2f}%')\n",
    "    \n",
    "#     # 绘制所有 iteration 的损失曲线\n",
    "#     plot_iter_losses(all_iter_losses, iter_indices)\n",
    "#     # 保留原 epoch 级曲线（可选）\n",
    "#     # plot_metrics(train_losses, test_losses, train_accuracies, test_accuracies, epochs)\n",
    "    \n",
    "#     return epoch_test_acc  # 返回最终测试准确率\n",
    "\n",
    "# # 6. 测试模型\n",
    "# def test(model, test_loader, criterion, device):\n",
    "#     model.eval()  # 设置为评估模式\n",
    "#     test_loss = 0\n",
    "#     correct = 0\n",
    "#     total = 0\n",
    "    \n",
    "#     with torch.no_grad():  # 不计算梯度，节省内存和计算资源\n",
    "#         for data, target in test_loader:\n",
    "#             data, target = data.to(device), target.to(device)\n",
    "#             output = model(data)\n",
    "#             test_loss += criterion(output, target).item()\n",
    "            \n",
    "#             _, predicted = output.max(1)\n",
    "#             total += target.size(0)\n",
    "#             correct += predicted.eq(target).sum().item()\n",
    "    \n",
    "#     avg_loss = test_loss / len(test_loader)\n",
    "#     accuracy = 100. * correct / total\n",
    "#     return avg_loss, accuracy  # 返回损失和准确率\n",
    "\n",
    "# # 7.绘制每个 iteration 的损失曲线\n",
    "# def plot_iter_losses(losses, indices):\n",
    "#     plt.figure(figsize=(10, 4))\n",
    "#     plt.plot(indices, losses, 'b-', alpha=0.7, label='Iteration Loss')\n",
    "#     plt.xlabel('Iteration（Batch序号）')\n",
    "#     plt.ylabel('损失值')\n",
    "#     plt.title('每个 Iteration 的训练损失')\n",
    "#     plt.legend()\n",
    "#     plt.grid(True)\n",
    "#     plt.tight_layout()\n",
    "#     plt.show()\n",
    "\n",
    "# # 8. 执行训练和测试（设置 epochs=2 验证效果）\n",
    "# epochs = 2  \n",
    "# print(\"开始训练模型...\")\n",
    "# final_accuracy = train(model, train_loader, test_loader, criterion, optimizer, device, epochs)\n",
    "# print(f\"训练完成！最终测试准确率: {final_accuracy:.2f}%\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1d5b109a",
   "metadata": {},
   "source": [
    "## 彩色图片的规范写法\n",
    "\n",
    "彩色的通道也是在第一步被直接展平，其他代码一致"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "id": "1253afcb",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Files already downloaded and verified\n",
      "开始训练模型...\n",
      "Epoch: 1/20 | Batch: 100/782 | 单Batch损失: 1.8077 | 累计平均损失: 1.9125\n",
      "Epoch: 1/20 | Batch: 200/782 | 单Batch损失: 1.6074 | 累计平均损失: 1.8426\n",
      "Epoch: 1/20 | Batch: 300/782 | 单Batch损失: 1.7398 | 累计平均损失: 1.7997\n",
      "Epoch: 1/20 | Batch: 400/782 | 单Batch损失: 1.4806 | 累计平均损失: 1.7703\n",
      "Epoch: 1/20 | Batch: 500/782 | 单Batch损失: 1.4886 | 累计平均损失: 1.7446\n",
      "Epoch: 1/20 | Batch: 600/782 | 单Batch损失: 1.5184 | 累计平均损失: 1.7276\n",
      "Epoch: 1/20 | Batch: 700/782 | 单Batch损失: 1.8482 | 累计平均损失: 1.7151\n",
      "Epoch 1/20 完成 | 训练准确率: 39.43% | 测试准确率: 45.36%\n",
      "Epoch: 2/20 | Batch: 100/782 | 单Batch损失: 1.3831 | 累计平均损失: 1.4669\n",
      "Epoch: 2/20 | Batch: 200/782 | 单Batch损失: 1.3637 | 累计平均损失: 1.4693\n",
      "Epoch: 2/20 | Batch: 300/782 | 单Batch损失: 1.6578 | 累计平均损失: 1.4730\n",
      "Epoch: 2/20 | Batch: 400/782 | 单Batch损失: 1.5088 | 累计平均损失: 1.4667\n",
      "Epoch: 2/20 | Batch: 500/782 | 单Batch损失: 1.3744 | 累计平均损失: 1.4660\n",
      "Epoch: 2/20 | Batch: 600/782 | 单Batch损失: 1.5227 | 累计平均损失: 1.4630\n",
      "Epoch: 2/20 | Batch: 700/782 | 单Batch损失: 1.5014 | 累计平均损失: 1.4627\n",
      "Epoch 2/20 完成 | 训练准确率: 48.39% | 测试准确率: 48.32%\n",
      "Epoch: 3/20 | Batch: 100/782 | 单Batch损失: 1.4056 | 累计平均损失: 1.3430\n",
      "Epoch: 3/20 | Batch: 200/782 | 单Batch损失: 1.2368 | 累计平均损失: 1.3300\n",
      "Epoch: 3/20 | Batch: 300/782 | 单Batch损失: 1.3304 | 累计平均损失: 1.3352\n",
      "Epoch: 3/20 | Batch: 400/782 | 单Batch损失: 1.1077 | 累计平均损失: 1.3407\n",
      "Epoch: 3/20 | Batch: 500/782 | 单Batch损失: 1.4874 | 累计平均损失: 1.3422\n",
      "Epoch: 3/20 | Batch: 600/782 | 单Batch损失: 1.2793 | 累计平均损失: 1.3427\n",
      "Epoch: 3/20 | Batch: 700/782 | 单Batch损失: 1.4587 | 累计平均损失: 1.3447\n",
      "Epoch 3/20 完成 | 训练准确率: 52.55% | 测试准确率: 51.32%\n",
      "Epoch: 4/20 | Batch: 100/782 | 单Batch损失: 1.1435 | 累计平均损失: 1.2318\n",
      "Epoch: 4/20 | Batch: 200/782 | 单Batch损失: 1.5731 | 累计平均损失: 1.2438\n",
      "Epoch: 4/20 | Batch: 300/782 | 单Batch损失: 1.4256 | 累计平均损失: 1.2434\n",
      "Epoch: 4/20 | Batch: 400/782 | 单Batch损失: 1.2422 | 累计平均损失: 1.2464\n",
      "Epoch: 4/20 | Batch: 500/782 | 单Batch损失: 1.4303 | 累计平均损失: 1.2481\n",
      "Epoch: 4/20 | Batch: 600/782 | 单Batch损失: 1.3966 | 累计平均损失: 1.2501\n",
      "Epoch: 4/20 | Batch: 700/782 | 单Batch损失: 1.2377 | 累计平均损失: 1.2546\n",
      "Epoch 4/20 完成 | 训练准确率: 55.44% | 测试准确率: 50.58%\n",
      "Epoch: 5/20 | Batch: 100/782 | 单Batch损失: 1.2511 | 累计平均损失: 1.1545\n",
      "Epoch: 5/20 | Batch: 200/782 | 单Batch损失: 1.2885 | 累计平均损失: 1.1576\n",
      "Epoch: 5/20 | Batch: 300/782 | 单Batch损失: 1.2130 | 累计平均损失: 1.1667\n",
      "Epoch: 5/20 | Batch: 400/782 | 单Batch损失: 1.0851 | 累计平均损失: 1.1684\n",
      "Epoch: 5/20 | Batch: 500/782 | 单Batch损失: 1.3902 | 累计平均损失: 1.1675\n",
      "Epoch: 5/20 | Batch: 600/782 | 单Batch损失: 1.2293 | 累计平均损失: 1.1661\n",
      "Epoch: 5/20 | Batch: 700/782 | 单Batch损失: 1.0104 | 累计平均损失: 1.1667\n",
      "Epoch 5/20 完成 | 训练准确率: 58.58% | 测试准确率: 52.33%\n",
      "Epoch: 6/20 | Batch: 100/782 | 单Batch损失: 1.1741 | 累计平均损失: 1.0360\n",
      "Epoch: 6/20 | Batch: 200/782 | 单Batch损失: 1.0454 | 累计平均损失: 1.0492\n",
      "Epoch: 6/20 | Batch: 300/782 | 单Batch损失: 1.0181 | 累计平均损失: 1.0601\n",
      "Epoch: 6/20 | Batch: 400/782 | 单Batch损失: 0.9719 | 累计平均损失: 1.0674\n",
      "Epoch: 6/20 | Batch: 500/782 | 单Batch损失: 0.8914 | 累计平均损失: 1.0724\n",
      "Epoch: 6/20 | Batch: 600/782 | 单Batch损失: 1.0058 | 累计平均损失: 1.0798\n",
      "Epoch: 6/20 | Batch: 700/782 | 单Batch损失: 1.0079 | 累计平均损失: 1.0847\n",
      "Epoch 6/20 完成 | 训练准确率: 61.29% | 测试准确率: 52.42%\n",
      "Epoch: 7/20 | Batch: 100/782 | 单Batch损失: 0.9277 | 累计平均损失: 0.9729\n",
      "Epoch: 7/20 | Batch: 200/782 | 单Batch损失: 0.9453 | 累计平均损失: 0.9867\n",
      "Epoch: 7/20 | Batch: 300/782 | 单Batch损失: 1.1329 | 累计平均损失: 0.9957\n",
      "Epoch: 7/20 | Batch: 400/782 | 单Batch损失: 1.1643 | 累计平均损失: 1.0029\n",
      "Epoch: 7/20 | Batch: 500/782 | 单Batch损失: 1.0009 | 累计平均损失: 1.0036\n",
      "Epoch: 7/20 | Batch: 600/782 | 单Batch损失: 1.0897 | 累计平均损失: 1.0105\n",
      "Epoch: 7/20 | Batch: 700/782 | 单Batch损失: 0.9353 | 累计平均损失: 1.0122\n",
      "Epoch 7/20 完成 | 训练准确率: 63.83% | 测试准确率: 53.23%\n",
      "Epoch: 8/20 | Batch: 100/782 | 单Batch损失: 0.8126 | 累计平均损失: 0.9025\n",
      "Epoch: 8/20 | Batch: 200/782 | 单Batch损失: 0.9867 | 累计平均损失: 0.8911\n",
      "Epoch: 8/20 | Batch: 300/782 | 单Batch损失: 0.6664 | 累计平均损失: 0.8952\n",
      "Epoch: 8/20 | Batch: 400/782 | 单Batch损失: 0.9331 | 累计平均损失: 0.9083\n",
      "Epoch: 8/20 | Batch: 500/782 | 单Batch损失: 0.7988 | 累计平均损失: 0.9170\n",
      "Epoch: 8/20 | Batch: 600/782 | 单Batch损失: 0.8833 | 累计平均损失: 0.9276\n",
      "Epoch: 8/20 | Batch: 700/782 | 单Batch损失: 0.8107 | 累计平均损失: 0.9361\n",
      "Epoch 8/20 完成 | 训练准确率: 66.29% | 测试准确率: 52.69%\n",
      "Epoch: 9/20 | Batch: 100/782 | 单Batch损失: 0.9422 | 累计平均损失: 0.8223\n",
      "Epoch: 9/20 | Batch: 200/782 | 单Batch损失: 1.1191 | 累计平均损失: 0.8260\n",
      "Epoch: 9/20 | Batch: 300/782 | 单Batch损失: 0.8772 | 累计平均损失: 0.8303\n",
      "Epoch: 9/20 | Batch: 400/782 | 单Batch损失: 1.0643 | 累计平均损失: 0.8424\n",
      "Epoch: 9/20 | Batch: 500/782 | 单Batch损失: 0.9481 | 累计平均损失: 0.8482\n",
      "Epoch: 9/20 | Batch: 600/782 | 单Batch损失: 1.1955 | 累计平均损失: 0.8581\n",
      "Epoch: 9/20 | Batch: 700/782 | 单Batch损失: 0.8107 | 累计平均损失: 0.8622\n",
      "Epoch 9/20 完成 | 训练准确率: 68.85% | 测试准确率: 52.10%\n",
      "Epoch: 10/20 | Batch: 100/782 | 单Batch损失: 0.9278 | 累计平均损失: 0.7558\n",
      "Epoch: 10/20 | Batch: 200/782 | 单Batch损失: 0.6106 | 累计平均损失: 0.7595\n",
      "Epoch: 10/20 | Batch: 300/782 | 单Batch损失: 0.8664 | 累计平均损失: 0.7670\n",
      "Epoch: 10/20 | Batch: 400/782 | 单Batch损失: 0.8446 | 累计平均损失: 0.7708\n",
      "Epoch: 10/20 | Batch: 500/782 | 单Batch损失: 0.9738 | 累计平均损失: 0.7790\n",
      "Epoch: 10/20 | Batch: 600/782 | 单Batch损失: 0.9130 | 累计平均损失: 0.7867\n",
      "Epoch: 10/20 | Batch: 700/782 | 单Batch损失: 0.9078 | 累计平均损失: 0.7936\n",
      "Epoch 10/20 完成 | 训练准确率: 71.38% | 测试准确率: 53.01%\n",
      "Epoch: 11/20 | Batch: 100/782 | 单Batch损失: 0.6402 | 累计平均损失: 0.6871\n",
      "Epoch: 11/20 | Batch: 200/782 | 单Batch损失: 0.7935 | 累计平均损失: 0.6893\n",
      "Epoch: 11/20 | Batch: 300/782 | 单Batch损失: 0.7513 | 累计平均损失: 0.7026\n",
      "Epoch: 11/20 | Batch: 400/782 | 单Batch损失: 0.9429 | 累计平均损失: 0.7153\n",
      "Epoch: 11/20 | Batch: 500/782 | 单Batch损失: 0.6525 | 累计平均损失: 0.7219\n",
      "Epoch: 11/20 | Batch: 600/782 | 单Batch损失: 0.9268 | 累计平均损失: 0.7307\n",
      "Epoch: 11/20 | Batch: 700/782 | 单Batch损失: 0.5548 | 累计平均损失: 0.7340\n",
      "Epoch 11/20 完成 | 训练准确率: 73.44% | 测试准确率: 52.51%\n",
      "Epoch: 12/20 | Batch: 100/782 | 单Batch损失: 0.6176 | 累计平均损失: 0.6142\n",
      "Epoch: 12/20 | Batch: 200/782 | 单Batch损失: 0.7543 | 累计平均损失: 0.6335\n",
      "Epoch: 12/20 | Batch: 300/782 | 单Batch损失: 0.6295 | 累计平均损失: 0.6461\n",
      "Epoch: 12/20 | Batch: 400/782 | 单Batch损失: 0.4608 | 累计平均损失: 0.6533\n",
      "Epoch: 12/20 | Batch: 500/782 | 单Batch损失: 0.5611 | 累计平均损失: 0.6661\n",
      "Epoch: 12/20 | Batch: 600/782 | 单Batch损失: 0.6843 | 累计平均损失: 0.6729\n",
      "Epoch: 12/20 | Batch: 700/782 | 单Batch损失: 0.7903 | 累计平均损失: 0.6799\n",
      "Epoch 12/20 完成 | 训练准确率: 75.67% | 测试准确率: 52.23%\n",
      "Epoch: 13/20 | Batch: 100/782 | 单Batch损失: 0.5043 | 累计平均损失: 0.5892\n",
      "Epoch: 13/20 | Batch: 200/782 | 单Batch损失: 0.5915 | 累计平均损失: 0.5744\n",
      "Epoch: 13/20 | Batch: 300/782 | 单Batch损失: 0.3866 | 累计平均损失: 0.5840\n",
      "Epoch: 13/20 | Batch: 400/782 | 单Batch损失: 0.6512 | 累计平均损失: 0.5927\n",
      "Epoch: 13/20 | Batch: 500/782 | 单Batch损失: 0.5521 | 累计平均损失: 0.5985\n",
      "Epoch: 13/20 | Batch: 600/782 | 单Batch损失: 0.6899 | 累计平均损失: 0.6081\n",
      "Epoch: 13/20 | Batch: 700/782 | 单Batch损失: 1.0226 | 累计平均损失: 0.6168\n",
      "Epoch 13/20 完成 | 训练准确率: 77.94% | 测试准确率: 53.61%\n",
      "Epoch: 14/20 | Batch: 100/782 | 单Batch损失: 0.2617 | 累计平均损失: 0.5374\n",
      "Epoch: 14/20 | Batch: 200/782 | 单Batch损失: 0.5938 | 累计平均损失: 0.5367\n",
      "Epoch: 14/20 | Batch: 300/782 | 单Batch损失: 0.5605 | 累计平均损失: 0.5378\n",
      "Epoch: 14/20 | Batch: 400/782 | 单Batch损失: 0.5295 | 累计平均损失: 0.5479\n",
      "Epoch: 14/20 | Batch: 500/782 | 单Batch损失: 0.6355 | 累计平均损失: 0.5599\n",
      "Epoch: 14/20 | Batch: 600/782 | 单Batch损失: 0.5767 | 累计平均损失: 0.5648\n",
      "Epoch: 14/20 | Batch: 700/782 | 单Batch损失: 0.7111 | 累计平均损失: 0.5717\n",
      "Epoch 14/20 完成 | 训练准确率: 79.35% | 测试准确率: 52.69%\n",
      "Epoch: 15/20 | Batch: 100/782 | 单Batch损失: 0.2707 | 累计平均损失: 0.4779\n",
      "Epoch: 15/20 | Batch: 200/782 | 单Batch损失: 0.2778 | 累计平均损失: 0.4865\n",
      "Epoch: 15/20 | Batch: 300/782 | 单Batch损失: 0.5449 | 累计平均损失: 0.4968\n",
      "Epoch: 15/20 | Batch: 400/782 | 单Batch损失: 0.6294 | 累计平均损失: 0.5017\n",
      "Epoch: 15/20 | Batch: 500/782 | 单Batch损失: 0.5366 | 累计平均损失: 0.5080\n",
      "Epoch: 15/20 | Batch: 600/782 | 单Batch损失: 0.4407 | 累计平均损失: 0.5174\n",
      "Epoch: 15/20 | Batch: 700/782 | 单Batch损失: 0.6451 | 累计平均损失: 0.5253\n",
      "Epoch 15/20 完成 | 训练准确率: 81.06% | 测试准确率: 52.64%\n",
      "Epoch: 16/20 | Batch: 100/782 | 单Batch损失: 0.6881 | 累计平均损失: 0.4451\n",
      "Epoch: 16/20 | Batch: 200/782 | 单Batch损失: 0.4996 | 累计平均损失: 0.4471\n",
      "Epoch: 16/20 | Batch: 300/782 | 单Batch损失: 0.5469 | 累计平均损失: 0.4607\n",
      "Epoch: 16/20 | Batch: 400/782 | 单Batch损失: 0.6781 | 累计平均损失: 0.4733\n",
      "Epoch: 16/20 | Batch: 500/782 | 单Batch损失: 0.7900 | 累计平均损失: 0.4838\n",
      "Epoch: 16/20 | Batch: 600/782 | 单Batch损失: 0.5282 | 累计平均损失: 0.4880\n",
      "Epoch: 16/20 | Batch: 700/782 | 单Batch损失: 0.5217 | 累计平均损失: 0.4942\n",
      "Epoch 16/20 完成 | 训练准确率: 82.15% | 测试准确率: 52.63%\n",
      "Epoch: 17/20 | Batch: 100/782 | 单Batch损失: 0.5320 | 累计平均损失: 0.4118\n",
      "Epoch: 17/20 | Batch: 200/782 | 单Batch损失: 0.4442 | 累计平均损失: 0.4162\n",
      "Epoch: 17/20 | Batch: 300/782 | 单Batch损失: 0.4952 | 累计平均损失: 0.4249\n",
      "Epoch: 17/20 | Batch: 400/782 | 单Batch损失: 0.4195 | 累计平均损失: 0.4342\n",
      "Epoch: 17/20 | Batch: 500/782 | 单Batch损失: 0.4573 | 累计平均损失: 0.4453\n",
      "Epoch: 17/20 | Batch: 600/782 | 单Batch损失: 0.4631 | 累计平均损失: 0.4515\n",
      "Epoch: 17/20 | Batch: 700/782 | 单Batch损失: 0.4552 | 累计平均损失: 0.4575\n",
      "Epoch 17/20 完成 | 训练准确率: 83.55% | 测试准确率: 52.80%\n",
      "Epoch: 18/20 | Batch: 100/782 | 单Batch损失: 0.2212 | 累计平均损失: 0.3911\n",
      "Epoch: 18/20 | Batch: 200/782 | 单Batch损失: 0.3049 | 累计平均损失: 0.3895\n",
      "Epoch: 18/20 | Batch: 300/782 | 单Batch损失: 0.4986 | 累计平均损失: 0.4007\n",
      "Epoch: 18/20 | Batch: 400/782 | 单Batch损失: 0.3962 | 累计平均损失: 0.4075\n",
      "Epoch: 18/20 | Batch: 500/782 | 单Batch损失: 0.4092 | 累计平均损失: 0.4159\n",
      "Epoch: 18/20 | Batch: 600/782 | 单Batch损失: 0.3700 | 累计平均损失: 0.4233\n",
      "Epoch: 18/20 | Batch: 700/782 | 单Batch损失: 0.4538 | 累计平均损失: 0.4323\n",
      "Epoch 18/20 完成 | 训练准确率: 84.28% | 测试准确率: 51.88%\n",
      "Epoch: 19/20 | Batch: 100/782 | 单Batch损失: 0.3703 | 累计平均损失: 0.3645\n",
      "Epoch: 19/20 | Batch: 200/782 | 单Batch损失: 0.4807 | 累计平均损失: 0.3642\n",
      "Epoch: 19/20 | Batch: 300/782 | 单Batch损失: 0.4501 | 累计平均损失: 0.3684\n",
      "Epoch: 19/20 | Batch: 400/782 | 单Batch损失: 0.3209 | 累计平均损失: 0.3812\n",
      "Epoch: 19/20 | Batch: 500/782 | 单Batch损失: 0.5543 | 累计平均损失: 0.3870\n",
      "Epoch: 19/20 | Batch: 600/782 | 单Batch损失: 0.4586 | 累计平均损失: 0.3935\n",
      "Epoch: 19/20 | Batch: 700/782 | 单Batch损失: 0.5588 | 累计平均损失: 0.3997\n",
      "Epoch 19/20 完成 | 训练准确率: 85.71% | 测试准确率: 53.66%\n",
      "Epoch: 20/20 | Batch: 100/782 | 单Batch损失: 0.4661 | 累计平均损失: 0.3689\n",
      "Epoch: 20/20 | Batch: 200/782 | 单Batch损失: 0.3074 | 累计平均损失: 0.3479\n",
      "Epoch: 20/20 | Batch: 300/782 | 单Batch损失: 0.3794 | 累计平均损失: 0.3492\n",
      "Epoch: 20/20 | Batch: 400/782 | 单Batch损失: 0.3515 | 累计平均损失: 0.3652\n",
      "Epoch: 20/20 | Batch: 500/782 | 单Batch损失: 0.2618 | 累计平均损失: 0.3697\n",
      "Epoch: 20/20 | Batch: 600/782 | 单Batch损失: 0.2653 | 累计平均损失: 0.3773\n",
      "Epoch: 20/20 | Batch: 700/782 | 单Batch损失: 0.5042 | 累计平均损失: 0.3846\n",
      "Epoch 20/20 完成 | 训练准确率: 86.15% | 测试准确率: 51.59%\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA90AAAGGCAYAAABmGOKbAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuNSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/xnp5ZAAAACXBIWXMAAA9hAAAPYQGoP6dpAACceklEQVR4nOzdd3hTZRsG8DvdjJa2tOwCZcmSIUMUkI3IJwi4GCpTliJDkKHspSwBBWSDiDhAlgKKICJ77w0F2W2htKXQNm3O98cxeycnOSft/buuXknOfJK3ac9z3qUSBEEAEREREREREUnOT+4AiIiIiIiIiHIqJt1EREREREREHsKkm4iIiIiIiMhDmHQTEREREREReQiTbiIiIiIiIiIPYdJNRERERERE5CFMuomIiIiIiIg8hEk3ERERERERkYcw6SYiIiIiIiLyECbdREQku2+++QYzZ86EIAiSHG/OnDnYvXu3JMci6cXHx+Phw4dmyxMTE/Hvv//a3Hf37t3YsmWL2zE8ffrU6rq5c+fi0aNHNvdfunQpypQp43YchhISEvDpp5/iypUrkh6XiIjkxaSbiIhklZCQgFGjRmHfvn24ceMGrl+/bvHn6tWrOHv2rN3jnT9/Hh9//DFmzZrlhejJFWvXrkWpUqWQlpZmtPz3339HbGyszXI+f/482rdvjzVr1uiWpaWlYcmSJXjw4IHZ9j///DN++eUXs+XNmjXDhAkTzJZfuXIFAwcOxLFjx2y+B39/f2RnZxstK1euHPz9/REQEGD0o1KpkJGRYfE4O3fuhEajASDeCJgyZQru3r1r89xERORbmHQTEZFsBEFA9+7dkZqaih07dqBGjRp2f+wdr3///ihWrBh+++037NixQ5I4r1+/DpVKhQ0bNkhyPLlo38f169dljePcuXNo3rw58uXLZ7T8999/xwsvvIAqVapY3bdPnz74+uuv8d577+mS6ezsbLz//vu4efMmAGD48OHYv38/ALFm/J9//jE6xpUrV7B//3689NJLAICrV6/i0qVLuH79OlatWoXy5cujTJkyups9Z86cQVJSktExtMm0oTx58mDp0qXIysrS/Vy5cgUqlQrBwcFm7+X69eto1qyZruY+ICAAAFCwYEHbHyAREfmUALkDICKi3GvYsGH4/fffsXXrVjRv3tzt402dOhUHDhzAkSNHsHz5cnTq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GjVqoFevXihfvjz69++PTZs2Ge1foEABrFq1Cs2aNdMlz2XLlsW9e/fw4osv4tKlS1Cr1bh48SIAIDQ0VDeYW1hYGMLDwxEYGGg3ziVLlqBLly5o164dKlasiJkzZ2LRokW6GuaAgAAsXLgQsbGxeO+993Dz5k23PpdFixZh0KBBaNy4MZ577jmMGzcO33zzDQDobkqo1WpUqlQJV65cQfPmzXXrBEFAVlYWXnjhBSQlJaFChQpuxWILa7oVxM/gFsipU0DZsvLFQkRERESUUwQHizXOUtFoBKSkpCEsLAx+fraruj09TtOtW7dw/PhxXZKclZWF/PnzG20zYMAAs/2ePn2K999/H//88w+qV68Of39/ZGdnuxXLzZs38dJLL+lely1bFk+fPkXCfzWK9erV090sCAoK0iXj7pyvTJkyRuf7999/AQCNGjXCJ598gp49e+LOnTt48803MWvWLOTNmxedOnXC2bNn0bZtW6SlpaFr166YPHmyW7HYwppuBfFjaRARERERSU6lEpt4y/EjZRdSPz8/s0S1RIkSaNOmDU6cOIETJ07g5MmT2L59u9E2lpqGz5kzB8nJybh79y527NiBF154wcLnpnIqMS5ZsiSuXbume33t2jXkyZMH0dHRAMRacylZOl+pUqV0zzt06ICTJ09i37592Ldvn64W/MqVK/jggw9w+fJl/PPPP1ixYgU2bNggaWyGmOYpiGHSLcWAC0RERERElHOULVsWf/zxhy5RBoCOHTvin3/+weXLlxEcHIyvvvoK3bt3t3us1NRUaDQaJCQk4Pvvv8eCBQvMEuyyZcti69atuH37tkN9r3v16oXVq1djw4YNuHjxIoYMGYI+ffroBmVz1ePHj3Hr1i3dz507dwAA77//PmbPno2///4bx48fx9ixY9G3b18AwJ9//on27dvj+PHjusHcsv6bLuq7775Dt27dcO7cOd2gc1mGU0lJjEm3ghj26SYiIiIiIjI0ffp0/PbbbyhZsiTGjRsHQEyMv/32WwwZMgTlypXDqVOnsGbNGrvHGjRoEDIyMlChQgUsX74cPXv2xIkTJ4y2WbBgAWbOnInY2FgsXLjQ7jFr166NlStXYvjw4ahfvz5q1aqFqVOnuvJWjSxduhQxMTG6H23/69dffx1jxozBe++9h9atW6NLly66pvTdu3dHo0aN8Morr6BB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JS5r2BAIDnbteDdvShWZc9Rqec5LRERERES+jUk3ecXXX+ufZ2U5nnSnpzu2nSdrus+dA4YPBwoUMF8nCKxiJyIiIiIi69i8nNziaLK7d69rx58507X9pLRwofiYnCxvHERERERE5HuYdJNb7PXpdteBA549vtTi44GUFLmjICIiIiIipWDzcvJJnk72HWUYR0oK0LOn+DwnT5dGRERERESOY003+ZStW4FTp+SOQu/o0cK653IN8kZERERERMrFpJu87ttv3dv/00/N+5Lv3+/eMbWePAFu3JDmWEREREREREy6yeu2bNE/X7UK+Ogj549h2rw8MdG9mLR69wY+/FAcsdxZ//4rTQzelpUFLFsGHD8udyRERERERDkPk26S1U8/AXFxckehpx2h3NkB3LKygPnzpY/HG37/HVi/HhgzRu5IiIiIiIhyHg6kRm5ZtMgzx01OBtLSPHNsS27fdq+mOiNDuli87f59uSMgIiIiIsq5mHSTW65f99yxt261vu7qVWnP1bevtMez5949sW96u3ZAmzbePTcREREREXkPm5eTYq1c6fq+n34K/PWXdLFIbckScU5vT7UUICIiIiIiZWDSTbLJzPTcsU+dAmbNkuZY165JcxxD2dnSH9MTPFlGrhIE5czTTkRERERkD5NuksXmzeKI2Z524gQwerTYnJssM51+TWvzZuD114F9+7wbjz2ffQYMGOA7Ny6IiIiIKHdj0k2yWLQI+O03z59n9Ggx8Z450/J6qQZA8+WaV2uxa5u+T5/uvVgcceqUOJf6zZtyR0JEREREZB+TbsoVHj40X3bxIvDGG57pV23pmD//DPzxh/TnIiIiIiIi5WLSTbnWd9+Jj5s3S39s02Pevg18+y3w1VfSn4uIiIiIiJSLSTflWt5sEu7NOcedZa1PNxERERERuY9JN+VaycnSHctSAt+mDbBli+X19hLds2eBxYuB9HRp4iMiIiIiInkw6aZc6/p1z59jwQLLy+3Vso8YAWzaBPz0k/jak1N3+dIgcL4UKxERERERwKRbkcLC5I4g57tyRb5zZ2cDjx45tu2dO8aPcsjKAg4dku/8npaaKo5y/9dfckdCRERERDkRk24FqliR1XlSM23Offeu/X327PHMdFmzZhkn/bdviz9SSE8Hdu92vA/5gQPA+vX2t5s40b24lOz778Vp5WbNkjsS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",
      "text/plain": [
       "<Figure size 1000x400 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练完成！最终测试准确率: 51.59%\n"
     ]
    }
   ],
   "source": [
    "import torch\n",
    "import torch.nn as nn\n",
    "import torch.optim as optim\n",
    "from torchvision import datasets, transforms\n",
    "from torch.utils.data import DataLoader\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "\n",
    "# 设置中文字体支持\n",
    "plt.rcParams[\"font.family\"] = [\"SimHei\"]\n",
    "plt.rcParams['axes.unicode_minus'] = False  # 解决负号显示问题\n",
    "\n",
    "# 1. 数据预处理\n",
    "transform = transforms.Compose([\n",
    "    transforms.ToTensor(),                # 转换为张量\n",
    "    transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))  # 标准化处理\n",
    "])\n",
    "\n",
    "# 2. 加载CIFAR-10数据集\n",
    "train_dataset = datasets.CIFAR10(\n",
    "    root='./data',\n",
    "    train=True,\n",
    "    download=True,\n",
    "    transform=transform\n",
    ")\n",
    "\n",
    "test_dataset = datasets.CIFAR10(\n",
    "    root='./data',\n",
    "    train=False,\n",
    "    transform=transform\n",
    ")\n",
    "\n",
    "# 3. 创建数据加载器\n",
    "batch_size = 64\n",
    "train_loader = DataLoader(train_dataset, batch_size=batch_size, shuffle=True)\n",
    "test_loader = DataLoader(test_dataset, batch_size=batch_size, shuffle=False)\n",
    "\n",
    "# 4. 定义MLP模型（适应CIFAR-10的输入尺寸）\n",
    "class MLP(nn.Module):\n",
    "    def __init__(self):\n",
    "        super(MLP, self).__init__()\n",
    "        self.flatten = nn.Flatten()  # 将3x32x32的图像展平为3072维向量\n",
    "        self.layer1 = nn.Linear(3072, 512)  # 第一层：3072个输入，512个神经元\n",
    "        self.relu1 = nn.ReLU()\n",
    "        self.dropout1 = nn.Dropout(0.2)  # 添加Dropout防止过拟合\n",
    "        self.layer2 = nn.Linear(512, 256)  # 第二层：512个输入，256个神经元\n",
    "        self.relu2 = nn.ReLU()\n",
    "        self.dropout2 = nn.Dropout(0.2)\n",
    "        self.layer3 = nn.Linear(256, 10)  # 输出层：10个类别\n",
    "        \n",
    "    def forward(self, x):\n",
    "        # 第一步：将输入图像展平为一维向量\n",
    "        x = self.flatten(x)  # 输入尺寸: [batch_size, 3, 32, 32] → [batch_size, 3072]\n",
    "        \n",
    "        # 第一层全连接 + 激活 + Dropout\n",
    "        x = self.layer1(x)   # 线性变换: [batch_size, 3072] → [batch_size, 512]\n",
    "        x = self.relu1(x)    # 应用ReLU激活函数\n",
    "        x = self.dropout1(x) # 训练时随机丢弃部分神经元输出\n",
    "        \n",
    "        # 第二层全连接 + 激活 + Dropout\n",
    "        x = self.layer2(x)   # 线性变换: [batch_size, 512] → [batch_size, 256]\n",
    "        x = self.relu2(x)    # 应用ReLU激活函数\n",
    "        x = self.dropout2(x) # 训练时随机丢弃部分神经元输出\n",
    "        \n",
    "        # 第三层（输出层）全连接\n",
    "        x = self.layer3(x)   # 线性变换: [batch_size, 256] → [batch_size, 10]\n",
    "        \n",
    "        return x  # 返回未经过Softmax的logits\n",
    "\n",
    "# 检查GPU是否可用\n",
    "device = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n",
    "\n",
    "# 初始化模型\n",
    "model = MLP()\n",
    "model = model.to(device)  # 将模型移至GPU（如果可用）\n",
    "\n",
    "criterion = nn.CrossEntropyLoss()  # 交叉熵损失函数\n",
    "optimizer = optim.Adam(model.parameters(), lr=0.001)  # Adam优化器\n",
    "\n",
    "# 5. 训练模型（记录每个 iteration 的损失）\n",
    "def train(model, train_loader, test_loader, criterion, optimizer, device, epochs):\n",
    "    model.train()  # 设置为训练模式\n",
    "    \n",
    "    # 记录每个 iteration 的损失\n",
    "    all_iter_losses = []  # 存储所有 batch 的损失\n",
    "    iter_indices = []     # 存储 iteration 序号\n",
    "    \n",
    "    for epoch in range(epochs):\n",
    "        running_loss = 0.0\n",
    "        correct = 0\n",
    "        total = 0\n",
    "        \n",
    "        for batch_idx, (data, target) in enumerate(train_loader):\n",
    "            data, target = data.to(device), target.to(device)  # 移至GPU\n",
    "            \n",
    "            optimizer.zero_grad()  # 梯度清零\n",
    "            output = model(data)  # 前向传播\n",
    "            loss = criterion(output, target)  # 计算损失\n",
    "            loss.backward()  # 反向传播\n",
    "            optimizer.step()  # 更新参数\n",
    "            \n",
    "            # 记录当前 iteration 的损失\n",
    "            iter_loss = loss.item()\n",
    "            all_iter_losses.append(iter_loss)\n",
    "            iter_indices.append(epoch * len(train_loader) + batch_idx + 1)\n",
    "            \n",
    "            # 统计准确率和损失\n",
    "            running_loss += iter_loss\n",
    "            _, predicted = output.max(1)\n",
    "            total += target.size(0)\n",
    "            correct += predicted.eq(target).sum().item()\n",
    "            \n",
    "            # 每100个批次打印一次训练信息\n",
    "            if (batch_idx + 1) % 100 == 0:\n",
    "                print(f'Epoch: {epoch+1}/{epochs} | Batch: {batch_idx+1}/{len(train_loader)} '\n",
    "                      f'| 单Batch损失: {iter_loss:.4f} | 累计平均损失: {running_loss/(batch_idx+1):.4f}')\n",
    "        \n",
    "        # 计算当前epoch的平均训练损失和准确率\n",
    "        epoch_train_loss = running_loss / len(train_loader)\n",
    "        epoch_train_acc = 100. * correct / total\n",
    "        \n",
    "        # 测试阶段\n",
    "        model.eval()  # 设置为评估模式\n",
    "        test_loss = 0\n",
    "        correct_test = 0\n",
    "        total_test = 0\n",
    "        \n",
    "        with torch.no_grad():\n",
    "            for data, target in test_loader:\n",
    "                data, target = data.to(device), target.to(device)\n",
    "                output = model(data)\n",
    "                test_loss += criterion(output, target).item()\n",
    "                _, predicted = output.max(1)\n",
    "                total_test += target.size(0)\n",
    "                correct_test += predicted.eq(target).sum().item()\n",
    "        \n",
    "        epoch_test_loss = test_loss / len(test_loader)\n",
    "        epoch_test_acc = 100. * correct_test / total_test\n",
    "        \n",
    "        print(f'Epoch {epoch+1}/{epochs} 完成 | 训练准确率: {epoch_train_acc:.2f}% | 测试准确率: {epoch_test_acc:.2f}%')\n",
    "    \n",
    "    # 绘制所有 iteration 的损失曲线\n",
    "    plot_iter_losses(all_iter_losses, iter_indices)\n",
    "    \n",
    "    return epoch_test_acc  # 返回最终测试准确率\n",
    "\n",
    "# 6. 绘制每个 iteration 的损失曲线\n",
    "def plot_iter_losses(losses, indices):\n",
    "    plt.figure(figsize=(10, 4))\n",
    "    plt.plot(indices, losses, 'b-', alpha=0.7, label='Iteration Loss')\n",
    "    plt.xlabel('Iteration（Batch序号）')\n",
    "    plt.ylabel('损失值')\n",
    "    plt.title('每个 Iteration 的训练损失')\n",
    "    plt.legend()\n",
    "    plt.grid(True)\n",
    "    plt.tight_layout()\n",
    "    plt.show()\n",
    "\n",
    "# 7. 执行训练和测试\n",
    "epochs = 20  # 增加训练轮次以获得更好效果\n",
    "print(\"开始训练模型...\")\n",
    "final_accuracy = train(model, train_loader, test_loader, criterion, optimizer, device, epochs)\n",
    "print(f\"训练完成！最终测试准确率: {final_accuracy:.2f}%\")\n",
    "\n",
    "# # 保存模型\n",
    "# torch.save(model.state_dict(), 'cifar10_mlp_model.pth')\n",
    "# # print(\"模型已保存为: cifar10_mlp_model.pth\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5f1cb8cd",
   "metadata": {},
   "source": [
    "由于深度mlp的参数过多，为了避免过拟合在这里引入了dropout这个操作，他可以在训练阶段随机丢弃一些神经元，避免过拟合情况。dropout的取值也是超参数。\n",
    "\n",
    "在测试阶段，由于开启了eval模式，会自动关闭dropout。\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7cc432d4",
   "metadata": {},
   "source": [
    "可以继续调用这个函数来复用"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "id": "ad4e5fa3",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "开始训练模型...\n",
      "Epoch: 1/20 | Batch: 100/782 | 单Batch损失: 1.4619 | 累计平均损失: 1.3271\n",
      "Epoch: 1/20 | Batch: 200/782 | 单Batch损失: 1.2312 | 累计平均损失: 1.2557\n",
      "Epoch: 1/20 | Batch: 300/782 | 单Batch损失: 1.1511 | 累计平均损失: 1.2159\n",
      "Epoch: 1/20 | Batch: 400/782 | 单Batch损失: 0.9654 | 累计平均损失: 1.1774\n",
      "Epoch: 1/20 | Batch: 500/782 | 单Batch损失: 1.2084 | 累计平均损失: 1.1537\n",
      "Epoch: 1/20 | Batch: 600/782 | 单Batch损失: 1.2039 | 累计平均损失: 1.1260\n",
      "Epoch: 1/20 | Batch: 700/782 | 单Batch损失: 1.0381 | 累计平均损失: 1.1123\n",
      "Epoch 1/20 完成 | 训练准确率: 63.63% | 测试准确率: 52.61%\n",
      "Epoch: 2/20 | Batch: 100/782 | 单Batch损失: 0.3717 | 累计平均损失: 0.4796\n",
      "Epoch: 2/20 | Batch: 200/782 | 单Batch损失: 0.3691 | 累计平均损失: 0.4380\n",
      "Epoch: 2/20 | Batch: 300/782 | 单Batch损失: 0.3134 | 累计平均损失: 0.4115\n",
      "Epoch: 2/20 | Batch: 400/782 | 单Batch损失: 0.3479 | 累计平均损失: 0.3937\n",
      "Epoch: 2/20 | Batch: 500/782 | 单Batch损失: 0.3160 | 累计平均损失: 0.3820\n",
      "Epoch: 2/20 | Batch: 600/782 | 单Batch损失: 0.4037 | 累计平均损失: 0.3761\n",
      "Epoch: 2/20 | Batch: 700/782 | 单Batch损失: 0.4130 | 累计平均损失: 0.3708\n",
      "Epoch 2/20 完成 | 训练准确率: 87.23% | 测试准确率: 53.91%\n",
      "Epoch: 3/20 | Batch: 100/782 | 单Batch损失: 0.3526 | 累计平均损失: 0.2483\n",
      "Epoch: 3/20 | Batch: 200/782 | 单Batch损失: 0.4958 | 累计平均损失: 0.2644\n",
      "Epoch: 3/20 | Batch: 300/782 | 单Batch损失: 0.2418 | 累计平均损失: 0.2742\n",
      "Epoch: 3/20 | Batch: 400/782 | 单Batch损失: 0.2887 | 累计平均损失: 0.2823\n",
      "Epoch: 3/20 | Batch: 500/782 | 单Batch损失: 0.2651 | 累计平均损失: 0.2902\n",
      "Epoch: 3/20 | Batch: 600/782 | 单Batch损失: 0.4208 | 累计平均损失: 0.2969\n",
      "Epoch: 3/20 | Batch: 700/782 | 单Batch损失: 0.5297 | 累计平均损失: 0.3066\n",
      "Epoch 3/20 完成 | 训练准确率: 88.99% | 测试准确率: 52.74%\n",
      "Epoch: 4/20 | Batch: 100/782 | 单Batch损失: 0.2994 | 累计平均损失: 0.3053\n",
      "Epoch: 4/20 | Batch: 200/782 | 单Batch损失: 0.2492 | 累计平均损失: 0.2865\n",
      "Epoch: 4/20 | Batch: 300/782 | 单Batch损失: 0.2671 | 累计平均损失: 0.2934\n",
      "Epoch: 4/20 | Batch: 400/782 | 单Batch损失: 0.3402 | 累计平均损失: 0.3009\n",
      "Epoch: 4/20 | Batch: 500/782 | 单Batch损失: 0.3917 | 累计平均损失: 0.3101\n",
      "Epoch: 4/20 | Batch: 600/782 | 单Batch损失: 0.3708 | 累计平均损失: 0.3226\n",
      "Epoch: 4/20 | Batch: 700/782 | 单Batch损失: 0.4512 | 累计平均损失: 0.3286\n",
      "Epoch 4/20 完成 | 训练准确率: 88.29% | 测试准确率: 52.30%\n",
      "Epoch: 5/20 | Batch: 100/782 | 单Batch损失: 0.3248 | 累计平均损失: 0.2962\n",
      "Epoch: 5/20 | Batch: 200/782 | 单Batch损失: 0.4970 | 累计平均损失: 0.2960\n",
      "Epoch: 5/20 | Batch: 300/782 | 单Batch损失: 0.2850 | 累计平均损失: 0.3082\n",
      "Epoch: 5/20 | Batch: 400/782 | 单Batch损失: 0.3529 | 累计平均损失: 0.3095\n",
      "Epoch: 5/20 | Batch: 500/782 | 单Batch损失: 0.2250 | 累计平均损失: 0.3100\n",
      "Epoch: 5/20 | Batch: 600/782 | 单Batch损失: 0.4958 | 累计平均损失: 0.3149\n",
      "Epoch: 5/20 | Batch: 700/782 | 单Batch损失: 0.2408 | 累计平均损失: 0.3193\n",
      "Epoch 5/20 完成 | 训练准确率: 88.60% | 测试准确率: 53.02%\n",
      "Epoch: 6/20 | Batch: 100/782 | 单Batch损失: 0.1920 | 累计平均损失: 0.3102\n",
      "Epoch: 6/20 | Batch: 200/782 | 单Batch损失: 0.1668 | 累计平均损失: 0.3053\n",
      "Epoch: 6/20 | Batch: 300/782 | 单Batch损失: 0.1788 | 累计平均损失: 0.2953\n",
      "Epoch: 6/20 | Batch: 400/782 | 单Batch损失: 0.4075 | 累计平均损失: 0.2948\n",
      "Epoch: 6/20 | Batch: 500/782 | 单Batch损失: 0.2510 | 累计平均损失: 0.2947\n",
      "Epoch: 6/20 | Batch: 600/782 | 单Batch损失: 0.2050 | 累计平均损失: 0.2986\n",
      "Epoch: 6/20 | Batch: 700/782 | 单Batch损失: 0.5312 | 累计平均损失: 0.3033\n",
      "Epoch 6/20 完成 | 训练准确率: 89.10% | 测试准确率: 53.53%\n",
      "Epoch: 7/20 | Batch: 100/782 | 单Batch损失: 0.2166 | 累计平均损失: 0.2619\n",
      "Epoch: 7/20 | Batch: 200/782 | 单Batch损失: 0.3512 | 累计平均损失: 0.2687\n",
      "Epoch: 7/20 | Batch: 300/782 | 单Batch损失: 0.3647 | 累计平均损失: 0.2775\n",
      "Epoch: 7/20 | Batch: 400/782 | 单Batch损失: 0.2889 | 累计平均损失: 0.2813\n",
      "Epoch: 7/20 | Batch: 500/782 | 单Batch损失: 0.2479 | 累计平均损失: 0.2866\n",
      "Epoch: 7/20 | Batch: 600/782 | 单Batch损失: 0.4674 | 累计平均损失: 0.2940\n",
      "Epoch: 7/20 | Batch: 700/782 | 单Batch损失: 0.4617 | 累计平均损失: 0.3015\n",
      "Epoch 7/20 完成 | 训练准确率: 89.66% | 测试准确率: 52.66%\n",
      "Epoch: 8/20 | Batch: 100/782 | 单Batch损失: 0.2086 | 累计平均损失: 0.2536\n",
      "Epoch: 8/20 | Batch: 200/782 | 单Batch损失: 0.2134 | 累计平均损失: 0.2535\n",
      "Epoch: 8/20 | Batch: 300/782 | 单Batch损失: 0.2565 | 累计平均损失: 0.2543\n",
      "Epoch: 8/20 | Batch: 400/782 | 单Batch损失: 0.3714 | 累计平均损失: 0.2594\n",
      "Epoch: 8/20 | Batch: 500/782 | 单Batch损失: 0.2150 | 累计平均损失: 0.2643\n",
      "Epoch: 8/20 | Batch: 600/782 | 单Batch损失: 0.2809 | 累计平均损失: 0.2691\n",
      "Epoch: 8/20 | Batch: 700/782 | 单Batch损失: 0.4545 | 累计平均损失: 0.2740\n",
      "Epoch 8/20 完成 | 训练准确率: 90.25% | 测试准确率: 51.92%\n",
      "Epoch: 9/20 | Batch: 100/782 | 单Batch损失: 0.2487 | 累计平均损失: 0.2876\n",
      "Epoch: 9/20 | Batch: 200/782 | 单Batch损失: 0.1357 | 累计平均损失: 0.2653\n",
      "Epoch: 9/20 | Batch: 300/782 | 单Batch损失: 0.0931 | 累计平均损失: 0.2680\n",
      "Epoch: 9/20 | Batch: 400/782 | 单Batch损失: 0.4563 | 累计平均损失: 0.2739\n",
      "Epoch: 9/20 | Batch: 500/782 | 单Batch损失: 0.3293 | 累计平均损失: 0.2761\n",
      "Epoch: 9/20 | Batch: 600/782 | 单Batch损失: 0.3813 | 累计平均损失: 0.2745\n",
      "Epoch: 9/20 | Batch: 700/782 | 单Batch损失: 0.2299 | 累计平均损失: 0.2751\n",
      "Epoch 9/20 完成 | 训练准确率: 90.42% | 测试准确率: 53.40%\n",
      "Epoch: 10/20 | Batch: 100/782 | 单Batch损失: 0.2981 | 累计平均损失: 0.3056\n",
      "Epoch: 10/20 | Batch: 200/782 | 单Batch损失: 0.2199 | 累计平均损失: 0.2931\n",
      "Epoch: 10/20 | Batch: 300/782 | 单Batch损失: 0.3375 | 累计平均损失: 0.2854\n",
      "Epoch: 10/20 | Batch: 400/782 | 单Batch损失: 0.4397 | 累计平均损失: 0.2812\n",
      "Epoch: 10/20 | Batch: 500/782 | 单Batch损失: 0.3059 | 累计平均损失: 0.2805\n",
      "Epoch: 10/20 | Batch: 600/782 | 单Batch损失: 0.3160 | 累计平均损失: 0.2858\n",
      "Epoch: 10/20 | Batch: 700/782 | 单Batch损失: 0.5194 | 累计平均损失: 0.2853\n",
      "Epoch 10/20 完成 | 训练准确率: 89.89% | 测试准确率: 51.50%\n",
      "Epoch: 11/20 | Batch: 100/782 | 单Batch损失: 0.1122 | 累计平均损失: 0.2332\n",
      "Epoch: 11/20 | Batch: 200/782 | 单Batch损失: 0.1647 | 累计平均损失: 0.2357\n",
      "Epoch: 11/20 | Batch: 300/782 | 单Batch损失: 0.2570 | 累计平均损失: 0.2366\n",
      "Epoch: 11/20 | Batch: 400/782 | 单Batch损失: 0.3052 | 累计平均损失: 0.2416\n",
      "Epoch: 11/20 | Batch: 500/782 | 单Batch损失: 0.3760 | 累计平均损失: 0.2417\n",
      "Epoch: 11/20 | Batch: 600/782 | 单Batch损失: 0.1941 | 累计平均损失: 0.2495\n",
      "Epoch: 11/20 | Batch: 700/782 | 单Batch损失: 0.4851 | 累计平均损失: 0.2567\n",
      "Epoch 11/20 完成 | 训练准确率: 90.94% | 测试准确率: 51.46%\n",
      "Epoch: 12/20 | Batch: 100/782 | 单Batch损失: 0.3288 | 累计平均损失: 0.2309\n",
      "Epoch: 12/20 | Batch: 200/782 | 单Batch损失: 0.1121 | 累计平均损失: 0.2223\n",
      "Epoch: 12/20 | Batch: 300/782 | 单Batch损失: 0.1995 | 累计平均损失: 0.2247\n",
      "Epoch: 12/20 | Batch: 400/782 | 单Batch损失: 0.4753 | 累计平均损失: 0.2275\n",
      "Epoch: 12/20 | Batch: 500/782 | 单Batch损失: 0.1604 | 累计平均损失: 0.2325\n",
      "Epoch: 12/20 | Batch: 600/782 | 单Batch损失: 0.2429 | 累计平均损失: 0.2387\n",
      "Epoch: 12/20 | Batch: 700/782 | 单Batch损失: 0.1945 | 累计平均损失: 0.2423\n",
      "Epoch 12/20 完成 | 训练准确率: 91.41% | 测试准确率: 51.64%\n",
      "Epoch: 13/20 | Batch: 100/782 | 单Batch损失: 0.1330 | 累计平均损失: 0.2135\n",
      "Epoch: 13/20 | Batch: 200/782 | 单Batch损失: 0.2700 | 累计平均损失: 0.2220\n",
      "Epoch: 13/20 | Batch: 300/782 | 单Batch损失: 0.1553 | 累计平均损失: 0.2316\n",
      "Epoch: 13/20 | Batch: 400/782 | 单Batch损失: 0.2453 | 累计平均损失: 0.2330\n",
      "Epoch: 13/20 | Batch: 500/782 | 单Batch损失: 0.2094 | 累计平均损失: 0.2330\n",
      "Epoch: 13/20 | Batch: 600/782 | 单Batch损失: 0.1698 | 累计平均损失: 0.2354\n",
      "Epoch: 13/20 | Batch: 700/782 | 单Batch损失: 0.2484 | 累计平均损失: 0.2391\n",
      "Epoch 13/20 完成 | 训练准确率: 91.62% | 测试准确率: 51.57%\n",
      "Epoch: 14/20 | Batch: 100/782 | 单Batch损失: 0.1442 | 累计平均损失: 0.2536\n",
      "Epoch: 14/20 | Batch: 200/782 | 单Batch损失: 0.1760 | 累计平均损失: 0.2478\n",
      "Epoch: 14/20 | Batch: 300/782 | 单Batch损失: 0.2174 | 累计平均损失: 0.2547\n",
      "Epoch: 14/20 | Batch: 400/782 | 单Batch损失: 0.3635 | 累计平均损失: 0.2534\n",
      "Epoch: 14/20 | Batch: 500/782 | 单Batch损失: 0.2063 | 累计平均损失: 0.2497\n",
      "Epoch: 14/20 | Batch: 600/782 | 单Batch损失: 0.2849 | 累计平均损失: 0.2500\n",
      "Epoch: 14/20 | Batch: 700/782 | 单Batch损失: 0.1911 | 累计平均损失: 0.2522\n",
      "Epoch 14/20 完成 | 训练准确率: 91.26% | 测试准确率: 52.80%\n",
      "Epoch: 15/20 | Batch: 100/782 | 单Batch损失: 0.2775 | 累计平均损失: 0.2189\n",
      "Epoch: 15/20 | Batch: 200/782 | 单Batch损失: 0.2573 | 累计平均损失: 0.2218\n",
      "Epoch: 15/20 | Batch: 300/782 | 单Batch损失: 0.2027 | 累计平均损失: 0.2130\n",
      "Epoch: 15/20 | Batch: 400/782 | 单Batch损失: 0.1956 | 累计平均损失: 0.2087\n",
      "Epoch: 15/20 | Batch: 500/782 | 单Batch损失: 0.2585 | 累计平均损失: 0.2122\n",
      "Epoch: 15/20 | Batch: 600/782 | 单Batch损失: 0.1852 | 累计平均损失: 0.2188\n",
      "Epoch: 15/20 | Batch: 700/782 | 单Batch损失: 0.4187 | 累计平均损失: 0.2222\n",
      "Epoch 15/20 完成 | 训练准确率: 92.24% | 测试准确率: 52.62%\n",
      "Epoch: 16/20 | Batch: 100/782 | 单Batch损失: 0.1929 | 累计平均损失: 0.1914\n",
      "Epoch: 16/20 | Batch: 200/782 | 单Batch损失: 0.1501 | 累计平均损失: 0.2000\n",
      "Epoch: 16/20 | Batch: 300/782 | 单Batch损失: 0.2517 | 累计平均损失: 0.2124\n",
      "Epoch: 16/20 | Batch: 400/782 | 单Batch损失: 0.3234 | 累计平均损失: 0.2209\n",
      "Epoch: 16/20 | Batch: 500/782 | 单Batch损失: 0.4349 | 累计平均损失: 0.2273\n",
      "Epoch: 16/20 | Batch: 600/782 | 单Batch损失: 0.2599 | 累计平均损失: 0.2312\n",
      "Epoch: 16/20 | Batch: 700/782 | 单Batch损失: 0.3407 | 累计平均损失: 0.2351\n",
      "Epoch 16/20 完成 | 训练准确率: 91.92% | 测试准确率: 52.44%\n",
      "Epoch: 17/20 | Batch: 100/782 | 单Batch损失: 0.2697 | 累计平均损失: 0.1811\n",
      "Epoch: 17/20 | Batch: 200/782 | 单Batch损失: 0.1481 | 累计平均损失: 0.1882\n",
      "Epoch: 17/20 | Batch: 300/782 | 单Batch损失: 0.1005 | 累计平均损失: 0.1928\n",
      "Epoch: 17/20 | Batch: 400/782 | 单Batch损失: 0.1714 | 累计平均损失: 0.2004\n",
      "Epoch: 17/20 | Batch: 500/782 | 单Batch损失: 0.4656 | 累计平均损失: 0.2105\n",
      "Epoch: 17/20 | Batch: 600/782 | 单Batch损失: 0.1378 | 累计平均损失: 0.2238\n",
      "Epoch: 17/20 | Batch: 700/782 | 单Batch损失: 0.2795 | 累计平均损失: 0.2320\n",
      "Epoch 17/20 完成 | 训练准确率: 92.09% | 测试准确率: 52.45%\n",
      "Epoch: 18/20 | Batch: 100/782 | 单Batch损失: 0.1461 | 累计平均损失: 0.2036\n",
      "Epoch: 18/20 | Batch: 200/782 | 单Batch损失: 0.3390 | 累计平均损失: 0.1922\n",
      "Epoch: 18/20 | Batch: 300/782 | 单Batch损失: 0.2414 | 累计平均损失: 0.1944\n",
      "Epoch: 18/20 | Batch: 400/782 | 单Batch损失: 0.2051 | 累计平均损失: 0.1900\n",
      "Epoch: 18/20 | Batch: 500/782 | 单Batch损失: 0.2092 | 累计平均损失: 0.1928\n",
      "Epoch: 18/20 | Batch: 600/782 | 单Batch损失: 0.1721 | 累计平均损失: 0.1985\n",
      "Epoch: 18/20 | Batch: 700/782 | 单Batch损失: 0.3793 | 累计平均损失: 0.2071\n",
      "Epoch 18/20 完成 | 训练准确率: 92.82% | 测试准确率: 52.33%\n",
      "Epoch: 19/20 | Batch: 100/782 | 单Batch损失: 0.2564 | 累计平均损失: 0.1907\n",
      "Epoch: 19/20 | Batch: 200/782 | 单Batch损失: 0.1887 | 累计平均损失: 0.1978\n",
      "Epoch: 19/20 | Batch: 300/782 | 单Batch损失: 0.1175 | 累计平均损失: 0.1953\n",
      "Epoch: 19/20 | Batch: 400/782 | 单Batch损失: 0.3717 | 累计平均损失: 0.1998\n",
      "Epoch: 19/20 | Batch: 500/782 | 单Batch损失: 0.2294 | 累计平均损失: 0.2066\n",
      "Epoch: 19/20 | Batch: 600/782 | 单Batch损失: 0.1868 | 累计平均损失: 0.2067\n",
      "Epoch: 19/20 | Batch: 700/782 | 单Batch损失: 0.1615 | 累计平均损失: 0.2114\n",
      "Epoch 19/20 完成 | 训练准确率: 92.69% | 测试准确率: 52.46%\n",
      "Epoch: 20/20 | Batch: 100/782 | 单Batch损失: 0.2190 | 累计平均损失: 0.2338\n",
      "Epoch: 20/20 | Batch: 200/782 | 单Batch损失: 0.1818 | 累计平均损失: 0.2232\n",
      "Epoch: 20/20 | Batch: 300/782 | 单Batch损失: 0.1221 | 累计平均损失: 0.2194\n",
      "Epoch: 20/20 | Batch: 400/782 | 单Batch损失: 0.3309 | 累计平均损失: 0.2235\n",
      "Epoch: 20/20 | Batch: 500/782 | 单Batch损失: 0.3291 | 累计平均损失: 0.2262\n",
      "Epoch: 20/20 | Batch: 600/782 | 单Batch损失: 0.3049 | 累计平均损失: 0.2267\n",
      "Epoch: 20/20 | Batch: 700/782 | 单Batch损失: 0.2965 | 累计平均损失: 0.2274\n",
      "Epoch 20/20 完成 | 训练准确率: 92.31% | 测试准确率: 52.40%\n"
     ]
    },
    {
     "data": {
      "image/png": "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l29bkiSULl0at27dsjmIFinL2byKiIhA6dKlncpnBt1ERERERJSvSJKEe/fuwd/fH9HR0fDzc22vWo1Gg8ePHyMsLMzl2ybXcjSvJElCeno64uPjAQBlypRxOA0MuomIiIiIKF/JyclBeno6ypYti8KFC7t8+9pm6yEhIQy6vZwzeVWoUCEAQHx8PEqWLOlwU3OeIURERERElK9o++4GBQUpnBLyddpCG7Va7fA2GHQTEREREVG+xP7W5CxXnEMMuomIiIiIiIjchEG3F9q2TYVFiwBJUjolRERERETkSXv37kVERITSybBpxYoVaNasmdv307t3bwwfPtzt+3EnBt1eaNEiP/zyC3D+vNIpISIiIiIib1GpUiXs3bvXY/tTqVS4ceOG2WU9evTAL7/84rG0+DKOXu7F0tOVTgEREREREZGpoKAgDlQnE2u6iYiIiIgoX5MkIDNTmR9XdBlt164dVCoVbt68iebNm0OlUuGzzz7TLd++fTuefvppREREoF+/fsjKytItq1SpEnbu3ImxY8eidOnSOK/XnHbJkiWoUKECihQpgs6dO+Px48cAgBo1augGEIuJiYFKpcLatWsN0mSpefn69evxxBNPIDIyEkOGDEFmZiYAYNKkSejduzemTJmCiIgIxMTE4MCBA04fm3nz5qFSpUooU6YMJk2aBI1GA0DMsz169GiUKlUKlSpVwnvvvQfpf5mRnZ2N3r17o1ixYihZsiSmTZvmdDqsYU03ERERERHla1lZwGuvuW57kqRCTk4oAgJUsDW49bp1QEiIc/vbsGED1Go1ateujfnz5+OFF17QzSF99epVvPLKK5g3bx6aNm2KLl264PPPP8f48eN1758wYQKqVq2KVatWoVKlSgCA8+fPY9CgQdi6dStq1qyJN954A/Pnz8fo0aNx9OhR5ObmolixYjh9+jQqVKiA0NBQm+k8evQoevXqhVWrVqFGjRro3bs3xowZgzlz5gAAtm7ditjYWJw8eRITJkzA2LFjsW/fPqeOy+TJk/Hjjz8iPDwcr7/+OiIiIjB8+HD89ttvWLJkCXbv3o309HR069YNHTt2RNu2bfHNN9/gwIEDOHLkCB48eIBWrVqhc+fOqFGjhsNpsYY13URERERERF4sNDQUERER8PPzQ1hYGCIiIhAcHAwA+OGHH1C3bl3069cP1apVw+DBg7Fl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0aNHDyQnJyM8PNzieooG3bt370anTp3w119/GdRimzNo0CBERkZi6tSpAICkpCSUK1cOaWlpZtc3V9MdHR2NBw8eWD0gSlKr1WjaNAVRUVG6ZvRamzaxptvbqNVq7NixA61bt7ZaYETKY175DuaV72Be+Q7mle9gXvkO5pXvcGdepaSkIDIy0mbQrVjz8ri4OHTv3h3z5s2zGXADQP369bF69Wrd/ydPnkS5cuUsrh8cHIzg4GCT1wMDA73+wlCpVPDzMxzjLjCQU6p7K184p0hgXvkO5pXvYF75DuaV72Be+Q7mle9wR17J3Z4ikVxGRgY6dOiAV155Ba+++ioeP36Mx48fQ5IkpKSkmG0y3rFjRxw4cAA7d+6EWq3GzJkz0bZtWwVST0RERERERCSPIkH377//jgsXLmDJkiUoUqSI7ufmzZuoXbs2fv31V5P3REZG4ssvv0RsbCxKlSqFy5cvY/z48QqknoiIiIiIiEgeRZqXv/LKK7DUlfzGjRsW3zdw4EC0bdsWly5dQpMmTRAWFuamFBIRERERERE5T/Epw+wVExODmJgYpZNBREREREREZBNH5yIiIiIiIiJyEwbdRERERERERG7CoJuIiIiIiIjITRh0ExEREREREbkJg24iIiIiIiIiN2HQTUREREREROQmDLqJiIiIiIiI3IRBNxEREREREZGbMOgmIiIiIiIichMG3URERERERERuwqCbiIiIiIiIyE0YdBMRERERERG5CYNuIiIiIiIiIjdh0E1ERERERETkJgy6iYiIiIiIiNyEQTcRERERERGRmzDoJiIiIiIiInITBt1EREREREREbsKgm4iIiIiIiMhNGHQTERERERERuQmDbiIiIiIiIiI3YdDtRQ4cUCmdBCIiIiIiInIhBt1e5OpVpVNARERERERErsSgm4iIiIiIiMhNGHQTERERERERuQmDbiIiIiIiIiI3YdBNRERERERE5CYMuomIiIiIiIjchEE3ERERERERkZsw6PYiKk7TTURERERElK8w6CYiIiIiIiJyEwbdPiI1VekUEBERERERkb0YdPuICxeA998H9uxROiVEREREREQkF4NuH7F4MXD1KjB7ttIpISIiIiIiIrkYdPuIjAylU0BERERERET2YtBNRERERERE5CYMun2EJCmdAiIiIiIiIrIXg24iIiIiIiIiN2HQTUREREREROQmDLoLAEli83QiIiIiIiIlMOjO5yQJmDABGDmSgTcREREREZGnMej2EY8fG/6v0QD//mv7fbm5wOnTwJUrwN277kkbERERERERmceg20d98QXQrx+wZ4/896hU7ksPERERERERmWLQ7aP+/FP8XrdO2XQQERERERGRZQy6CxDWdBMREREREXkWg+58joOnERERERERKYdBNxEREREREZGbMOj2IpmZ8tp/b9zo5oQQERERERGRSzDo9iKpqfLW++abvL/N9dPOymKzciIiIiIiIm/AoNvHGQfXDx4A//d/wKRJ5pcTERERERGR5zDo9iKuGF18927x+8QJ92yfiIiIiIiI5FMs6H7w4AFiYmJw48YNWet37NgRKpVK99OqVSv3JlABjgTFDKSJiIiIiIi8V4ASO33w4AE6dOggO+AGgGPHjuHs2bMoX748ACAwMNBNqVOOq5uC79oFVKiQ9//69cDTTwNNm7p2P0RERERERGSeIkF3t27d0KNHDxw+fFjW+nfu3IEkSXjqqafcnDLfJEnma7znzDH8/7ffxA+DbiIiIiIiIs9QpHn5kiVLMHToUNnrHzlyBLm5uShfvjxCQ0PRrVs3JCYmujGFynCkqbhaDbz7LvDFF65PDxERERERETlHkZrumJgYu9a/dOkS6tSpgy+++AJ+fn7o168fxo4di4ULF1p8T1ZWFrKysnT/p6SkAADUajXUarVjCXez3FzRvlySJGg0GlnvuXNH/L55Exg2LBc5OSpoNNbLUtTqXKfSSYL2PPLW84nyMK98B/PKdzCvfAfzyncwr3wH88p3uDOv5G5TJUnKTSqlUqkQFxeHSpUq2fW+ffv2oXPnznjw4IHFdSZNmoTJkyebvL569WoULlzY3qR6xKZNVXDuXKTD7x8//jD27y+LvXujba5HREREREREjktPT0ePHj2QnJyM8PBwi+spUtPtrJIlS+Lhw4fIyspCcHCw2XXGjh2LESNG6P5PSUlBdHQ02rRpY/WAKOniRQnnzj1CVFQUVA60NY+NjcXjxypcuGC9pjs2NtbiMkv9w8mUWq3Gjh070Lp163w5sF9+wrzyHcwr38G88h3MK9/BvPIdzCvf4c680ramtsUngu7XX38d7733Hl544QUAwKFDh1CqVCmLATcABAcHm10eGBjotReGv79o9q1SqeDnZ393+8BAPwQGArbeGhjoh9xcICMDCAvLe/3BA2DYMKBtW+Ctt+zefYHlzecUGWJe+Q7mle9gXvkO5pXvYF75DuaV73BHXsndnmLzdJuTkpJitl38008/jffffx/79+/Hpk2bMHbsWAwaNEiBFOYfw4cD3bsDCQl5r/3wA5CSAqxbp1iyiIiIiIiI8hWvCrpr166NX3/91eT1Dz/8ELVr10a7du0waNAgDB48GB999JECKcw/tFOk//WXoskgIiIiIiLK1xRtXm48htsNbSRoJDAwEMuWLcOyZcs8kCoiIiIiIiIi1/Cqmm4iIiIiIiKi/IRBdz4jZwK4jAzzr2/f7tq0EBERERERFXQMugugrl3tf09GBnDrluvTQkRERERElJ8x6PYirpgf211zbPfvDwweDFy+7J7tExERERER5UcMur2IuwJmayw1R5ckYNIkYPx48XdSknido50TERERERHJp+jo5eS90tOB48fF348eKZsWIiIiIiIiX8Wabi+Sm+vc+7OzgZUrXZOWqVNdsx0iIiIiIqKCjEG3F/njD+fal2/Z4qKEADh/Pu/vpUtdt10iIiIiIqKChEF3PvLtt+7Z7v797tkuERERERFRfsegu4BLTLRv/X/+EU3Pr151T3qIiIiIiIjyEw6kVsDZ24/8yBHx++hR1zZnJyIiIiIiyo9Y013Abd/u2PssTTVGREREREREeRh0F3AZGcC5c0qngoiIiIiIKH9i0E04cEDpFBAREREREeVPDLqJTcWJiIiIiIjchEE3ERERERERkZsw6CaoVEqngIiIiIiIKH9i0E1sXk5EREREROQmDLqJiIiIiIiI3IRBNxEREREREZGbMOgmAMC1a0qngIiIiIiIKP8JUDoBpLyrV4GbN5VOBRERERERUf7DoJtw+bLSKSAiIiIiIsqf2LycHJabq3QKiIiIiIiIvJvsoHvhwoXQaDRW18nOzkbVqlWdThT5hhMnlE4BERERERGRd5PdvHzatGl455138NNPPyElJQV+fqbxuiRJyMnJcWkCyXsxq4mIiIiIiKyTXdMdEBAAf39/TJ8+HYcPH8awYcNw6NAhjBgxQvf7r7/+MhuMU/4kSUqngIiIiIiIyLvJipAzMzN1f6tUKixYsACRkZFYsGABypQpY/BbYiRGREREREREBEBG8/K0tDRERUUhJycHzz//PK5cuQJABN/mfhMRERERERGRYLOmOygoCFu2bEFkZCTeffddREREeCBZRERERERERL7PZtAdGBiIVq1aISQkBD179kRkZCQWL16MlJQULF68GImJiQa/WeNNREREREREJMge9SwnJwcajQZt2rTBgQMH0L59exw6dAitWrUy+M0+3URERERERESCrCnDfv75Z0yZMgUA8Omnn1pcLycnB9HR0a5JGREREREREZGPsxl0JyYmolevXihVqhTS09NRunRpi+tmZ2dj4MCBLk0gERERERERka+yGXQXK1YM9+7dw+bNm/Hpp5/i3LlzKFWqFP7zn/+YNCXPzc2FWq12W2LJu7AnARERERERkXWympcHBweja9eu6Nq1K5YtW4ZRo0YhIiICCxcuROHChd2dRiIiIiIiIiKfJHsgNa2+ffvi1KlTqFevHgNuIiIiIiIiIivsDroBoGLFihg2bJir00JERERERESUrzgUdANipPJ+/foZvPb5559j+fLlTieKfAP7dBMREREREVlnV9CdlZWFXr16AQD8/f2xdu1ag+VLly7F+fPnXZc6IiIiIiIiIh9mV9Dt7++PzZs3AwBUKhUKFSqkW7Zx40bcu3cPo0aNcm0KiYiIiIiIiHyUXUF3QEAAAgMDdf+rVCoAQFJSEj744ANMnTrV6jzeRERERERERAWJ3X26tYG21oMHD9ClSxc0bNiQg6sRERERERER6ZE1T/e3336L4OBgFCpUCNnZ2di5cyfCwsLw+PFjPPXUU+jevTtmzpzp7rQSERERERER+RRZQffGjRuRnp4OPz8/ZGRkYMqUKXj48CEyMzNRrFgxtG3b1qDZORERERERERHJDLo3bdqk+zsqKgr79u0DAERGRuLTTz/FgAED8NZbb2Hq1KluSSQRkRySBKxeDVSsCLzwgtKpISIiIiKSGXQDwP3791G6dGmDPt1+fn7o3bs32rRpg1atWqFQoUIYN26cWxJKRGTL6dOAdiZDBt1ERERE5A1kB90tW7ZEqVKloNFoTJaVLVsWW7ZswbPPPosWLVqgUaNGLk0kEZEcSUlKp4CIiIiIyJDs0cuPHz+OPn36IDIyEq1bt8adO3eQk5OjW161alWMHj0aH3zwgVsSSkRERERERORrZAfdISEhePPNN3Hu3Dk8++yz2LVrFx4/fmywzoABA3D//n08evTI5Qkl7yNJSqeA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BeWNRO+Kzy9J/tBogOzsXKe3587rSu42VZLk+fKDkSNHIjMzE/PmzdO9FhUVhb///hvFLIwEUK9ePYwZMwav/a+Dwfnz59GjRw+cPn3a7PqTJk3CZDNFdqtXr9YF+0RERERERORdHjwIgSQBxYplISDAe6u709PT0aNHDyQnJyPcymiMitR0BwQEINioA05ISAjS09MtBt3G79Gub8nYsWMxQq+9RkpKCqKjo9GmTRurB0RJarUaO3bsQOvWrRHoirlyyK2YX76DeeU7mFe+g3nlO5hXvoN55TuYV77DnXmlbU1tiyJBd/HixXHu3DmD11JTUxFkZUz64sWLIyEhQfb6wcHBJoE9AAQGBnr9heELaaQ8zC/fwbzyHcwr38G88h3MK9/BvPIdzCvf4Y68krs9RaYdr1+/Pg4dOqT7Py4uDllZWShuZZI34/ecPHkS5cqVc2s6iYiIiIiIiJyhSND94osvIiUlBcuXLwcATJs2Da1atYK/vz+SkpKQm5tr8p4uXbpg7dq1OHv2LB4/foyvvvoKbfPrvAZERERERESULygSdAcEBGDp0qUYMmQIIiMjsXnzZsyYMQMAUKxYMZw9e9bkPXXq1MGwYcPwn//8B+XKlYO/vz8GDx7s6aQTERERERERyaZIn24A6NixI65du4bjx4+jUaNGKFGiBADA2mDqn376KXr27Ik7d+6gadOmVvt0ExERERERESlNsaAbAEqXLo2XXnrJrvfUqlULtWrVclOKiIiIiIiIiFxHkeblRERERERERAUBg24iIiIiIiIiN2HQTUREREREROQmDLqJiIiIiIiI3ETRgdQ8STsqekpKisIpsUytViM9PR0pKSkIDAxUOjlkA/PLdzCvfAfzyncwr3wH88p3MK98B/PKd7gzr7SxpbUZuIACFHSnpqYCAKKjoxVOCREREREREeUXqampKFq0qMXlKslWWJ5PaDQa3L17F0WKFIFKpVI6OWalpKQgOjoat27dQnh4uNLJIRuYX76DeeU7mFe+g3nlO5hXvoN55TuYV77DnXklSRJSU1NRtmxZ+PlZ7rldYGq6/fz8UL58eaWTIUt4eDgvXh/C/PIdzCvfwbzyHcwr38G88h3MK9/BvPId7sorazXcWhxIjYiIiIiIiMhNGHQTERERERERuQmDbi8SHByMiRMnIjg4WOmkkAzML9/BvPId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WL58Ofr27YtTp04ZrLNgwQLMmjULMTExspo9/+c//8G3336LDz/8EI0bN0a9evUwffp0Rz6qiY8//hhJSUno1asXNBqN7vVx48ahePHiaNWqFSpXrowlS5YAAGbMmIH169ejdu3auH//Plq3bq0LrAHRQmD69Olo1aoV6tSpg4MHDwIARo0ahVdffRVt2rTByy+/jIEDB6J79+420/f111+jY8eO8Pf31712+/ZtHD16FNeuXTOp2bYmIyMDZ86cwfnz57F27VrcvXvXJOjWaDR46623kJSUpDsXiIiInKGS7GnfRkRERPlObm4u1q1b55VNqc+dO4egoCBUr15d99revXvRsWNH1KtXDxs3bpQ9IF12djYqVKiA5ORkVKpUCX379sWoUaNM1luzZg26du1qEOgTERE5ikE3ERERFRjZ2dkICgpSOhlERFSAMOgmIiIiIiIichP26SYiIiIiIiJyEwbdRERERERERG7CoJuIiIiIiIjITRh0ExEREREREbkJg24iIiIiIiIiN2HQTUREREREROQmDLqJiIiIiIiI3IRBNxEREREREZGbMOgmIiIiIiIicpP/B4lO7jZSlAhxAAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 1000x400 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练完成！最终测试准确率: 52.40%\n"
     ]
    }
   ],
   "source": [
    "# 7. 执行训练和测试\n",
    "epochs = 20  # 增加训练轮次以获得更好效果\n",
    "print(\"开始训练模型...\")\n",
    "final_accuracy = train(model, train_loader, test_loader, criterion, optimizer, device, epochs)\n",
    "print(f\"训练完成！最终测试准确率: {final_accuracy:.2f}%\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "343fe275",
   "metadata": {},
   "source": [
    "此时你会发现MLP（多层感知机）在图像任务上表现较差（即使增加深度和轮次也只能达到 50-55% 准确率），主要原因与图像数据的空间特性和MLP 的结构缺陷密切相关。\n",
    "1. MLP 的每一层都是全连接层，输入图像会被展平为一维向量（如 CIFAR-10 的 32x32x3 图像展平为 3072 维向量）。图像中相邻像素通常具有强相关性（如边缘、纹理），但 MLP 将所有像素视为独立特征，无法利用局部空间结构。例如，识别 “汽车轮胎” 需要邻近像素的组合信息，而 MLP 需通过大量参数单独学习每个像素的关联，效率极低。\n",
    "2. 深层 MLP 的参数规模呈指数级增长，容易过拟合\n",
    "\n",
    "所以我们接下来将会学习CNN架构，CNN架构的参数规模相对较小，且训练速度更快，而且CNN架构可以解决图像识别问题，而MLP不能。"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "yolov5",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.20"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
